这是在应用程序中选择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