java中集合類HashSet、ArrayList、LinkedList總結

【HashSet】   

        1. HashSet存儲不能夠存儲相同的元素,元素是否相同的判斷:重寫元素的equals方法。equals方法和hashCode方法必須兼容,如:equals方法判斷的是用戶的名字name,那麼hashCode的返回的hashcode必須是name。hashcode();

        2. HashSet存儲是無序的,保存的順序與添加的順序是不一致的,它不是線性結構,而是散列結構,(通過散列表:散列單元指向鏈表)。因此,HashSet的查詢效率相對比較高。

        3. HashSet不是線程安全的,不是線程同步的。這需要自己實現線程同步:Collections.synchronizedCollection(),方法實現。

 

【ArrayList】

         1.  不是線程安全的,不是線程同步的。

         2.ArrayList是通過可變大小的數組實現的,允許null在內的所有元素。

         3.ArrayList中存放順序和添加順序是一致的。並且可重複元素。

         4.ArrayList適合通過位子來讀取元素。

 

【LinkedList】

         1.不是線程安全的,不是線程同步的。

         2.LinkedList是通過雙向循環鏈表來實現的。

         3.存放順序和添加順序是一致的。可添加重複元素。

         4.適合鏈表頭尾操作和插入指定位置元素的操作。

ArrayList和LinkedList之間的數據傳遞可通過toArray()方法。

 

【HashMap】

          1.非線程安全,不是線程同步。

          2.添加順序和保存的順序是不一致的。

          3.必須重寫key的equals方法和hashCode方法。

          4.HashMap的實際容量=容量*因子,默認爲16*0.75=12.所以考慮到HashMap的添加的效率問題,根據實際情況來設計它的開始的默認的容量。

           的操作方法根據api來查找。

          5.添加的值中是允許有null的值存在的。

 

【Hashtable】

          1.是線程安全的,是線程同步的,在實現線程同步的時候是不需要手動來實現線程同步的。因此相對效率低。

          2.添加的順序和保存的順序是不一致的。

          3.添加的值中是不允許有null值存在的。

 

【TreeMap】

          1.非線程安全,不是線程同步的。在必要的情況下必手動實現線程同步。

          2.在元素的添加,刪除和定位映射中效率相對hashMap較低。但是在排序方面TreeMap比較實用。

          3.添加的值中允許有null值,但是在輸出的時候會報空指針異常。

爲了實現添加,刪除效率提高同時實現排序的功能,則可以同時實用HashMap和TreeMap。現在HashMap對象hmap中添加和刪除,然後在TreeMap對象map.putAll(hmap)來實現排序。部分代碼如下:

Map<Number, Person> map = new HashMap<Number, Person>();
……// 由於篇幅有限,此處省略了向集合中添加映射關係的代碼
System.out.println("由HashMap類實現的Map集合,無序:");
for (Iterator<Number> it = map.keySet().iterator(); it.hasNext();) {// 遍歷集合
Person person = map.get(it.next());
System.out.println(person.getId_card() + " " + person.getName());
}
System.out.println("由TreeMap類實現的Map集合,鍵對象升序:");
TreeMap<Number, Person> treeMap = new TreeMap<Number, Person>();
treeMap.putAll(map);
……// 由於篇幅有限,此處省略了遍歷集合的代碼
System.out.println("由TreeMap類實現的Map集合,鍵對象降序:");
TreeMap<Number, Person> treeMap2 = new TreeMap<Number, Person>(
Collections.reverseOrder());// 初始化爲反轉排序
treeMap2.putAll(map);
……// 由於篇幅有限,此處省略了遍歷集合的代碼
}

     

 

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