java集合類

http://blog.csdn.net/u014136713/article/details/52089156

集合類存放於java.util包中。都是實現了Collection接口。主要有3種:set(集)、list(列表)和map(映射)。    

Collection<--List<--Vector            動態數組,線程同步的,效率很低
Collection<--List<--ArrayList        動態數組、刪除及插入元素代價大(刪除操作,需要將被刪除元素的後續元素向前移動)
Collection<--List<--LinkedList       鏈表、隊列、堆棧
Collection<--Set<--HashSet       以哈希表的形式存放元素,插入刪除速度很快。  
Collection<--Set<--HashSet< --LinkedHashSet   存取和查找 + 使用鏈表維護元素的次序
Collection<--Set<--SortedSet<--TreeSet   可以實現排序等功能

Collection接口裏的方法:

boolean     add(E o)    確保此 collection 包含指定的元素。
 boolean     addAll(Collection<? extends E> c)    將指定 collection 中的所有元素都添加到此 collection 中。
 void     clear()   移除此 collection 中的所有元素。
 boolean     contains(Object o)   如果此 collection 包含指定的元素,則返回 true。
 boolean     containsAll(Collection<?> c)   如果此 collection 包含指定 collection 中的所有元素,則返回true。
 boolean     equals(Object o)   比較此 collection 與指定對象是否相等。
 int     hashCode()   返回此 collection 的哈希碼值。
 boolean     isEmpty()   如果此 collection 不包含元素,則返回 true。
 Iterator<E>     iterator()    返回在此 collection 的元素上進行迭代的迭代器。
 boolean     remove(Object o)  從此 collection 中移除指定元素的單個實例,如果存在的話。
 boolean     removeAll(Collection<?> c)   移除此 collection 中那些也包含在指定 collection 中的所有元素。
 boolean     retainAll(Collection<?> c)    僅保留此 collection 中那些也包含在指定 collection 的元素。
 int     size()    返回此 collection 中的元素數。
 Object[]     toArray()   返回包含此 collection 中所有元素的數組。
<T> T[]   toArray(T[] a)  返回包含此 collection 中所有元素的數組;返回數組的運行時類型與指定數組的運行時類型相同。

如果已知將要保存的對象的數量時可以使用數組。
List總結:
其對象以線性方式存儲,沒有特定順序,只有一個開頭和一個結尾。(數組和向量、鏈表、堆棧、隊列)
1. 可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
2. 可以有null元素,例如[ tom,null,1 ];

3.ArrayList底層採用數組實現,適合查詢。LinkedList底層採用雙向鏈表實現,適合添加,刪除操作。

當向 ArrayList 添加一個對象時,實際上就是將該對象的引用放置到了ArrayList底層所維護的數組當中。LinkedList中所維護的是一個個的Entry對象。

Set總結:
它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裏放東西。元素不能重複(內容不能相同用equals方法比較)。
1. Set實現的基礎是Map;HashSet底層是用Map來實現的
2. Set中的元素是不能重複的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象

Map總結:

映射中存儲的每個對象都有一個相關的關鍵字(Key)對象,關鍵字決定了 對象在映射中的存儲位置,檢索對象時必須提供相應的關鍵字,關鍵字是唯一的。(鍵值對)
Map的keySet()方法會返回key的集合,因爲Map的鍵是不能重複的,因此keySet()方法的返回類型是Set;而Map的值是可以重複的,因此values()方法的返回類型是Collection,可以容納重複的元素。HashMap底層就是用數組和鏈表來實現的
Map的兩種遍歷方式:
1.利用keySet()方式得到key的信息的Set 集合,然後去遍歷這個這個集合,取出每一個key,然後通過get方法就可以得到Map中的鍵值對的所有信息了。
2.    Set set = map.entrySet();  
        for(Iterator iter = set.iterator(); iter.hasNext();){  
            Map.Entry entry = (Map.Entry)iter.next();  
            String key = (String)entry.getKey();  
            String value = (String)entry.getValue();  
        } 


棧(Stack類)也是一種特殊的線性表,是一種後進先出(LIFO)的結構。[last in first out]
棧是限定僅在表尾進行插入和刪除運算的線性表,表尾稱爲棧頂(top),表頭稱爲棧底(bottom)。棧的物理存儲可以用順序存儲結構,也可以用鏈式存儲結構。
public void push(Object o){}  [壓棧]
public Object pop(){}         [彈出元素,此時棧中不存在這個對象了]
public Object peek(){}        [查看棧中的元素,但是隻是獲取元素值,沒有把元素從棧彈出來]
public boolean isEmpty(){}    [查看隊列中的元素是否爲空,有元素返回false,沒元素返回true]

隊列(Queue接口)是限定所有的插入只能在表的一端進行,而所有的刪除都在表的另一端進行的線性表。[first in first out]
表中允許插入的一端稱爲隊尾(Rear),允許刪除的一端稱爲隊頭(Front)。隊列的操作是按先進先出(FIFO)的原則進行的。隊列的物理存儲可以用順序存儲結構,也可以用鏈式存儲結構。
public void put(Object o){}   [元素插入隊列]
public Object get(){}         [從隊列中取元素]
public boolean isEmpty(){}    [查看隊列中的元素是否爲空,有元素返回false,沒元素返回true]

      無論是棧還是隊列,裏面都會維護一個成員變量,該成員變量用於存儲棧或隊列中的元素,該成員變量請使用LinkedList類型。實現棧和隊列的功能不需要自己去定義方法的實現,使用LinkedList中的方法就可以實現棧和隊列的功能。

發佈了40 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章