java基礎回顧---java集合的特點
阿新 • • 發佈:2018-12-11
在java集合中,List和Set都是繼承Collection的
而Map相當於和Collection一個級別的
其中,List介面有三個實現類,ArrayList,LinkedList和Vector,Set介面實現類有HashSet和LinkedHashSet
Map的三個實現類是:HashMap,LinkedHashMap和HashTable
List的儲存特點是資料有序,可重複
Set的儲存特點是資料存入無序,不可重複
Map的儲存特點是資料無序,鍵值儲存,要保持鍵的唯一性
區別:
1、ArrayList,LinkedList和Vector的區別
LinkedList底層是連結串列實現的,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。連結串列增刪快,查詢慢
ArrayList則是陣列實現的,搜尋讀取資料快,刪除資料開銷大
Vector的特點是執行緒安全的,同步的,如果涉及到堆疊,佇列等操作,應該考慮用 Vector,如果需要快速隨機訪問元素,應該使用 ArrayList
2、hashMap,HashTable的區別
- HashMap 幾乎可以等價於 HashTable,除了 HashMap 是非 synchronized 的,並可以接受 null(HashMap 可以接受為 null 的鍵值 (key) 和值 (value),而 HashTable 則不行)。
- HashMap 是非 synchronized,而 HashTable 是 synchronized,這意味著 HashTable 是執行緒安全的,多個執行緒可以共享一個 HashTable;而如果沒有正確的同步的話,多個執行緒是不能共享 HashMap 的。Java 5 提供了 ConcurrentHashMap,它是 HashTable 的替代,比 HashTable 的擴充套件性更好。
- 另一個區別是 HashMap 的迭代器 (Iterator) 是 fail-fast 迭代器,而 HashTable 的 enumerator 迭代器不是 fail-fast 的。所以當有其它執行緒改變了 HashMap 的結構(增加或者移除元素),將會丟擲 ConcurrentModificationException,但迭代器本身的 remove() 方法移除元素則不會丟擲 ConcurrentModificationException 異常。但這並不是一個一定發生的行為,要看 JVM。這條同樣也是 Enumeration 和 Iterator 的區別。
- 由於 HashTable 是執行緒安全的也是 synchronized,所以在單執行緒環境下它比 HashMap 要慢。如果你不需要同步,只需要單一執行緒,那麼使用 HashMap 效能要好過 HashTable。
- HashMap 不能保證隨著時間的推移 Map 中的元素次序是不變的。