這是在應用程序中選擇Set , List或Map的正確實現的快速指南。
最好的通用或“主要”實現可能是ArrayList,LinkedHashMap和LinkedHashSet。 它們的整體性能更好,除非您需要其他實現提供的特殊功能,否則應使用它們。 該特殊功能通常是排序或排序。
在這里,“排序”是指迭代器返回的項目的順序,“排序”是指根據Comparable或Comparator對項目進行排序。
接口 | 有重復嗎? | 實作 | 歷史的 | ||||
組 | 沒有 | 哈希集 | … | LinkedHashSet * | … | 樹集 | … |
清單 | 是 | … | ArrayList * | … | 鏈表 | … | 向量 , 堆棧 |
地圖 | 沒有重復的鍵 | 哈希圖 | … | LinkedHashMap * | … | 樹狀圖 | 哈希表 , 屬性 |
非主要實現的主要特征:
- HashMap的性能比LinkedHashMap略好
- HashSet的性能比LinkedHashSet略好
- TreeSet已排序和排序,但速度較慢
- TreeMap已排序和排序,但速度較慢
- LinkedList可以快速添加到列表的開頭,并且可以通過迭代從內部快速刪除
以上實現的迭代順序:
- HashSet – 未定義
- HashMap – 未定義
- LinkedHashSet –插入順序
- LinkedHashMap –鍵的插入順序(默認情況下)或“訪問順序”
- ArrayList –插入順序
- LinkedList –插入順序
- TreeSet –按可比/比較器的升序
- TreeMap –根據可比/比較器,鍵的升序
對于LinkedHashSet和LinkedHashMap,項目的重新插入不會影響插入順序。
在地圖或集合中使用時,這些項目不得更改狀態(因此,建議這些項目是不可變的對象):
- 地圖鍵
- 套裝中的物品
排序要求:
- 存儲的項目實現可比性
- 定義存儲對象的比較器
要保留ORDER BY子句中指定的ResultSet的順序,請將記錄插入到List或LinkedHashMap中。
參考:在Architect's Diary博客上,從我們的JCG合作伙伴 Sanjeev Kumar 選擇合適的收藏 。
翻譯自: https://www.javacodegeeks.com/2012/09/java-choosing-right-collection.html