1. 程式人生 > >java基礎回顧---java集合的特點

java基礎回顧---java集合的特點

在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 中的元素次序是不變的。