1.簡介
集合框架(Collections Framework ) (容器類)
java.util包下
以下是java1.2版本之後提供的類和接口
Collection(接口)
---List(接口):有序可重複
----ArrayList(實現類):實現了 大小可變的數組
----LinkedList(實現類):鏈接列表實現除了實現 ,List 接口外,LinkedList
類還爲在列表的開頭及結尾 提供了統一的命名方法
---Set(接口):無序不重複
----HashSet(實現類):由哈希表支持 不重複
Object類的 hashCode():它將會給每一個對象產生一個int的數據作爲散列
碼。一般理想狀態就是不同的對象散列碼是不同的
判斷兩個對像是同一對象:
有個叫哈希桶 是來存放對象的地方 當我們把一個對象放入其中
時先會比較桶裏的每一個對象的hashCode值是否與放入的對象相
等如果相等就進一步去比較兩個對象的equals方法返回的值是否
爲ture 如果爲true 兩個對象就是同一個對象。
所以對像在覆蓋equals 方法和hashCode方法時標準要保持一致
(選一個能唯一代表整個對象的屬性)
---LinkedHashSet(實現類):具有可預知迭代順序(添加的順序)的 Set 接口的哈希
表和鏈接列表實 現
---TreeSet(實現類):使用元素的自然順序對元素進行排序(升序)
Iterator(接口):迭代器
兩個重要方法:hasNext next
Map(接口):將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。
----HashMap(實現類) 基於哈希表的 Map 接口的實現 按key無序
----LinkedHashMap(實現類):按照key是有序的
----TreeMap(實現類):按照key是升序的
jdk1.2以前的類
ArrayList 和 Vector的區別
1.當默認的初始化容量慢的情況下 ArrayList增加原來的一半
Vector是增加原來的一倍
2.ArrayList 是非線程安全 Vector是線程安全 ArrayList效率高一點
HashMap和 HashTable的區別
1.HashMap允許null的key存在 HashTable不允許
2.HashMap是非線程安全的 HashTable是線程安全 HashMap效率高一點
Properties:key value映射 key和value一般情況是Stirng
2.例子
以下幾個例子都會用到Person 所以首先給出
public class Person {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
//hashCode 生成的一個算法 提高效率
result = PRIME * result + (int) (id ^ (id >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)//比較地址相等 兩個對象一定是同一個
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())//兩個對象是否使用同一個類加載器
return false;
final Person other = (Person) obj;
if (id != other.id)//我們自己選擇的比較原則
return false;
return true;
}
}
1)ArrayList的例子
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestPersonArrayList {
public static void main(String[] str){
Person person=new Person();
person.setId(1001);
person.setName("yuiop");
List<Person> list= new ArrayList<Person>();
list.add(person);
//循環迭代方式(一)
for(Person p:list){
System.out.println(p.getName()+":"+p.getId());
}
//循環迭代方式(二)
for(int i=0;i<list.size();i++){
Person p=(Person)list.get(i);
System.out.println(p.getName()+":"+p.getId());
}
//循環迭代方式(三)
Iterator it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
System.out.println(p.getName()+":"+p.getId());
}
}
}
2)HashSet的例子
import java.util.HashSet;
import java.util.Set;
public class TestPersonHashSet {
public static void main(String[] args) {
Person person=new Person();
person.setId(1001);
person.setName("yuiop");
Person person1=new Person();
person1.setId(1001);
person1.setName("yuiop");
Set<Person> set= new HashSet<Person>();
set.add(person);
boolean flag=set.add(person1);
System.out.println(flag);//false
for(Person p:set){
System.out.println(p.getName()+":"+p.getId());
}
}
}
3)HashMap的例子
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestPersonHashMap {
public static void main(String[] args) {
Map<Long, Person> map = new HashMap<Long, Person>();
Person p = new Person();
p.setId(1001);
p.setName("jessica");
Person p1 = new Person();
p1.setId(1002);
p1.setName("jessica");
map.put(p.getId(), p);
map.put(p1.getId(), p1);
Set<Long> setKey = map.keySet();// 取到map集合裏所有的key值
for (Long key : setKey) {
Person person = map.get(key);// 根據key取Value
System.out.println("key:" + key + " value:" + person.getName());
}
System.out.println("-------------------------------------");
map.remove(new Long(1001));//根據key可以進行移除
System.out.println(map.size());
Set<Long> setKey1 = map.keySet();// 取到map集合裏所有的key值
for (Long key : setKey1) {
Person person = map.get(key);// 根據key取Value
System.out.println("key:" + key + " value:" + person.getName());
}
}
}