Java中集合的有序問題


Java中的容器主要包括兩方面:

  • Collection:List、Set、queue
  • Map:HashMap、treeMap;

 

一. Collection

 

 

 

1. Set

    • TreeSet:基於紅黑樹實現,支持有序性操作,例如根據一個范圍查找元素的操作。但是查找效率不如HashSet,HashSet 查找的時間復雜度為 O(1),TreeSet 則為 O(logN)。
    • HashSet:基於哈希表實現,支持快速查找,但不支持有序性操作。並且失去了元素的插入順序信息,也就是說使用 Iterator 遍歷 HashSet 得到的結果是不確定的。
    • LinkedHashSet:具有 HashSet 的查找效率,且內部使用雙向鏈表維護元素的插入順序。

2. List

  • ArrayList:基於動態數組實現,支持隨機訪問。
  • Vector:和 ArrayList 類似,但它是線程安全的。
  • LinkedList:基於雙向鏈表實現,只能順序訪問,但是可以快速地在鏈表中間插入和刪除元素。不僅如此,LinkedList 還可以用作棧、隊列和雙向隊列。

3. Queue

  • LinkedList:可以用它來實現雙向隊列。
  • PriorityQueue:基於堆結構實現,可以用它來實現優先隊列。

 

二、Map

 

 

 

  • TreeMap:基於紅黑樹實現。
  • HashMap:基於哈希表實現。
  • HashTable:和 HashMap 類似,但它是線程安全的,這意味着同一時刻多個線程可以同時寫入 HashTable 並且不會導致數據不一致。它是遺留類,不應該去使用它。現在可以使用 ConcurrentHashMap 來支持線程安全,並且 ConcurrentHashMap 的效率會更高,因為 ConcurrentHashMap 引入了分段鎖。
  • LinkedHashMap:使用雙向鏈表來維護元素的順序,順序為插入順序或者最近最少使用(LRU)順序.
    有序否 允許元素重復否
List  
Set AbstractSet
HashSet
TreeSet 是(二叉樹排序)
Map AbstractMap

使用key-value來映射和

存儲數據,Key必須惟一,

value可以重復

HashMap
TreeMap 是(二叉樹排序)

 

參考:

1. Java中List Set Map 是否有序等總結

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM