List和Set是Collection的子類。List已實現的子類:ArrayList、LinkedList和Vector;Set已實現的子類:HashSet和TreeSet。Map已實現的子類:HashMap、TreeMap和Hashtable。
List:
ArrayList:底層數據結構是數組,查詢速度快,增刪動作慢,元素的個數越多,其增刪越慢。
LinkedList:底層數據結構是鏈表,查詢速度慢,增刪動作快。
Vector:底層數據結構,線程同步,效率低。
每當需要增加長度時,ArrayList增長長度的50%,Vector增長長度的100%。
Vector特有方法:elements()獲取枚舉
Vector v=new Vector();
Enumeration en =v.elements();
While(en.hasMoreElements())
{
en.nextElement();
...
}
IO中有個類需要用枚舉。
LinkedList升級1.6後新增了方法:由原來的拋異常改爲返回null或false。
下面方法對,後面的是對前面方法的升級版。
方法對:addFirst——offerFirst(插入元素),getFirst——peekFirst(獲取元素),removeFirst——pollFirst(刪除元素並返回被刪除的元素)
新返回值: false null null
(...Last()方法一致。)
還有push()和pop()方法,LinkedList可以用作棧、隊列或雙端隊列。
Set:
Set:不可以重複元素
|--HashSet:數據結構是哈希表,線程是非同步的。
保證元素唯一性的原理,判斷元素的hashCode值是否相同。
如果相同,還會繼續判斷元素的equals方法,是否爲true。
|--TreeSet:可以對Set集合中元素進行排序。
保證元素唯一性的依據,是compareTo方法return 0;
讓元素自身具備比較性,元素需實現Comparable接口,此接口中有一個方法-compareTo()。這種方式也稱爲元素的自然順序。
TreeSet底層實現是二叉樹。
hashCode()和equals()複寫:
public int hashCode()
{
…
}
public boolean equals(Object obj)
{
If(!(obj instanceof XXX))
return false;
XXX x=(XXX)obj;
…
}
注意複寫時,equals方法的參數需要還是Object,一樣才叫複寫。
TreeSet排序的第一種方式,讓元素自身具備比較性。元素需要實現Comparable接口,覆蓋compareTo方法。這種方式也稱爲自然順序,或者叫做默認順序。
TreeSet排序的第二種方式。當元素自身不具備比較性,或者具備的比較性不是所需要的,這時就需要讓集合自身具備比較性,在集合一初始化時就具備比較性。
先定義一個比較器類,實現Comparator接口,實現其compare(Objecto1,Object o2)方法還有equals()方法(如果有equals()方法可以不用再實現),再將該比較器類對象傳入TreeSet構造方法。
Map:
鍵 | 值 | 元素 | 構造方法 | 線程同步 | 備註 | |
TreeMap | 不可null | 可null | 鍵需實現Comparable接口的compareTo方法 | 可傳入構造器 | 非同步 | 構造器實現Comparator接口中的compare(T t1,T t2)和equals(Object o) |
HashMap | 可null | 可null | 鍵需實現hashCode()和equals()方法 | 非同步 | 由於鍵不可重複,HashMap中只能有一個null鍵 | |
HashTable | 不可null | 不可null | 鍵需實現hashCode()和equals()方法 | 同步 |
TreeMap的鍵完全遵從TreeSet的存儲特性,HashMap的鍵完全遵從HashSet的特性。Map的值可以相同,還可以是null。
Map類添加鍵值對和刪除鍵值對用的方法是:
V put(K key,V value) // 如果Map中有key,則用新value替換舊值,返回舊值;如果Map中沒用key,則創建新鍵值對並返回null
V get(K key) //如果Map中沒有key,則返回null
判斷Map中是否含有某鍵或某值:
boolean containsKey(Object key)
boolean containsValue(Object value)
由Map獲取其所有鍵對應的Set:
Set<K> keySet()
由Map獲取其所有鍵值對對應的Set,每個鍵值對被定義爲一個Map.Entry<Key,Value>泛型類:
Set<Map.Entry<Key,Value>> entrySet() //獲得的Set中的元素是Map.Entry<Key,Value>類對象,Map.Entry<Key,Value>對象的方法有:
K getKey()
V getValue()
V setValue(V value)
boolean equals(Object obj)
集合框架類的通用方法:
void clear()
boolean isEmpty()
int size()
Iterator(迭代器):
Collection類對象都有迭代器,迭代器同意了對不同Collection類對象進行訪問的方式,Collection類對象的iterator()方法可獲得該對象的迭代器。
Iterator對象的方法:
boolean hasNext()
E next() // 其中E是該容器中存儲的類
void remove() //刪除剛由next()方法獲得的對象
ListIterator:
ListIterator是Iterator類型的一個子類,功能更強大,擴展的功能有:前向移動、添加、修改和返回當前位置前後的索引值。它只能用於List類的訪問。
ListIterator的方法:
void add(E e)
boolean hasNext()
boolean hasPrevious()
E next()
int nextIndex()
E previous()
int previousIndex()
void remove()
void set(E e)