Java集合之Set List Map
概述如下
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
List下有ArrayList,Vector,LinkedList
Set下有HashSet,LinkedHashSet,TreeSet
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
分
List:存储单列数据的集合,存储的数据是有顺序的,并且值允许重复;
List接口有三个实现类:
1 LinkedList
基于链表实现,链表内存是散列的,增删快,查找慢;
2 ArrayList
基于数组实现,非线程安全,效率高,增删慢,查找快;
3 Vector
基于数组实现,线程安全,效率低,增删慢,查找慢;
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Set是存储单列数据的集合 存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的
1 HashSet
底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
2 LinkedHashSet
继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap
3 TreeSet的主要功能用于排序
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Map是存储键值对这样的双列数据的集合;存储的数据是无序的,键是不允许重复的,值是允许重复的;
1 HashMap
基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null
键;
2 HashTable
线程安全,低效,不支持 null 值和 null 键;
3 LinkedHashMap
是 HashMap 的一个子类,保存了记录的插入顺序;
4 TreeMap 接口
TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用时机
- 如果你经常会使用索引来对容器中的元素进行访问,那么 List 是你的正确的选择。如果你已经知道索引了的话,那么 List 的实现类比如 ArrayList 可以提供更快速的访问。
- 如果你想容器中的元素能够按照它们插入的次序进行有序存储,那么还是 List,因为 List 是一个有序容器,它按照插入顺序进行存储。
- 如果你想保证插入元素的唯一性,也就是你不想有重复值的出现,那么可以选择一个 Set 的实现类,比如 HashSet、LinkedHashSet 或者 TreeSet。所有 Set 的实现类都遵循了统一约束比如唯一性,而且还提供了额外的特性比如 TreeSet 还是一个 SortedSet,所有存储于 TreeSet 中的元素可以使用 Java 里的 Comparator 或者 Comparable 进行排序。LinkedHashSet 也按照元素的插入顺序对它们进行存储。
- 如果你以键和值的形式进行数据存储那么 Map 是你正确的选择。你可以根据你的后续需要从 Hashtable、HashMap、TreeMap 中进行选择。
文章参考
[1]:https://blog.csdn.net/yangxingpa/article/details/81023138
[2]: https://blog.csdn.net/zhangqunshuai/article/details/80660974
[3]: https://blog.csdn.net/defonds/article/details/47951103