java的集合应用_Java之集合类应用总结
1.集合類類圖
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
├HashSet
├TreeSet
├LinkedHashSet
Map
├Hashtable
├HashMap
├WeakHashMap
└SortedMap
└TreeMap
2.分類介紹
Collection是最基本的集合接口,JDK提供的類都繼承自Collection的“子接口”,如List和Set。所有實現Collection接口的類都必須提供兩個標準的構造函數:無參數的構造函數和有一個Collection參數的構造函數。前者用于創建一個空的Collection,后者用于創建一個新的Collection,允許用戶復制一個Collection。不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,可逐一訪問Collection中每一個元素。用法如下:
Iterator it = collection.iterator(); //獲得一個迭代子 while(it.hasNext()) {
Object obj = it.next(); //得到下一個元素 }
由Collection接口派生的兩個接口是List和Set。
1)Collection和Map區別:
Collection類型,每個位置只有一個元素。
Map類型,持有key-value形式的數據——“鍵值對”,即其元素是成對的對象。
2)Collection子接口List和Set區別:
List是有序的Collection,確保維護元素特定的順序,這類似于Java的數組。
Set接口不保證維護元素的次序,存入Set的每個元素必須是唯一的。加入Set的Object必須定義equals()方法以確保對象的唯一性。
3)List實現類ArrayList、LinkedList和Vector區別
ArrayList實現了可變大小的數組,允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢(類似動態數組)。它允許所有元素,包括null。ArrayList沒有同步。如果數組長度一定,用數組效率更高。
LinkedList插入與刪除元素開銷不大,隨機訪問相比則相對較慢(類似鏈表)。可當堆棧、隊列和雙向隊列使用。
Vector是同步的。當一個Iterator被創建而且正在被使用,另一個線程改變了Vector的狀態,這時將拋出ConcurrentModificationException異常,因此必須捕獲該異常。比ArrayList慢。
Stack繼承自Vector,實現一個后進先出的堆棧。同步的。
4)Set實現類HashSet和TreeSet區別
HashSet為快速查找而設計的Set(采用散列函數)。存入HashSet的對象必須定義hashCode()。?它不保證集合的迭代順序;特別是它不保證該順序恒久不變。此類允許使用 null元素。此實現不是同步的。
TreeSet保持次序的Set,底層為紅黑樹。使用它可以從Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查詢速度,且內部使用鏈表維護元素的順序(哈希函數+鏈表)。于是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
5)Map實現類Hashtable、HashMap和WeakHashMap
Hashtable是同步的,不允許null。繼承于陳舊的Dictionary類的。
HashMap是非同步的,速度比Hashtable快。允許null。HashMap繼承于AbstractMap類。內部Hash數組等于Hashtable不同。Map 中插入、刪除和定位元素,HashMap 是最好的選擇。
WeakHashMap是一種改進的HashMap,若一個key不再被外部所引用,那么該key可以被GC回收。
TreeMap中所有元素都保持固定的順序,如果需有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
3 總結
容器對象僅能持有對象引用(對象的指針),而不是將對象信息Copy一根至數列末位置。
在多線程環境下,對于非同步的結合和Map,可以用類似List list = Collections.synchronizedList(new LinkedList(...));或Collections.synchronizedMap(originMap)實現其同步,或者其他手動同步的方法。
Map提供的不是對象與數組的關聯,而是對象和對象的關聯。
Set只接受不重復的對象。HashSet提供了最快的查詢速度。而TreeSet則保持元素有序。LinkedHashSet保持元素的插入順序。
沒必要再在新代碼里使用舊類庫留下來的Vector,Hashtable和Stack了。
總結
以上是生活随笔為你收集整理的java的集合应用_Java之集合类应用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql学时用什么类型_MYSQL数据
- 下一篇: java属于面相_[Java教程]面相对