LinkedList和ArrayList的區別在于LinkedList是采用雙向列表實現的,所以在指定位置進行插入或者刪除的時候效率比較高,ArrayList更適合查找元素。
ArrayList和Vector的區別在于Vector是線程安全的。但兩者都是基于存儲元素的object[] array來實現的。因為ArrayList不是線程安全的,所以效率會比Vector高。那么HashSet和TreeSet有什么區別呢?
hashSet是為快速查找而設計的Set,存入HashSet的元素必須定義為hashCode()。所以如果沒有其他的限制,HashSet就是默認的選擇,因為對速度進行了優化。
TreeSet是保持了次序的set,底層實現為樹結構,使用它可以從set中提取有序的序列,其元素必須實現comparable接口。
還有一種是LinkedHashSet,其是具有HashSet的查詢速度,并且內部使用鏈表維護元素的順序(插入的順序),于是在使用的時候(迭代器遍歷set時),結果會按照元素插入的次序顯示。同時,元素也必須定義為hashcode()方法。HashMap:如無限制,應該是默認的選擇。因為對速度進行了優化。Map是基于散列表的實現,插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設置容量和負載因子,以調整容器性能。
LinkedHashMap:類似于HashMap,但是迭代器遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最小使用的次序。因此,只比HashMap慢一點,而在迭代訪問時反而更快。因為使用是鏈表維護內部次序。
TreeMap:基于紅黑樹的實現,查看鍵或鍵值的時候,他們會被排序。TreeMap的特點在于,所得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的map,可以返回一個子樹。
WeakHashMap:弱鍵映射,允許釋放映射所指向的對象,這是為解決某類特殊問題而設計的。如果沒有映射之外沒有引用指向某個鍵,則此鍵被垃圾回收器回收。
ConcurrentHashMap:一種線程安全的Map,不涉及同步加鎖。
identityHashMap:使用==代替equals()對鍵進行比較的散列映射。注意:任何鍵都必須具有一個equals()方法,如果鍵被用于散列map,那么它必須還具有恰當的hashCode()方法,如果用于TreeMap(),還必須實現comparable。新聞熱點
疑難解答