List、Set、Map区别
三者关系如下:
结构特点
1.List和Set是存储单列数据集合,Map是存储键值对这样的双列数据集合;
2.List中存储的数据都是有序的,并且允许重复;Map中存储的数据是无序的,它的键是不允许重复的,值可以重复;Set存储的数据是无序的,并且不允许重复,元素在集合中的位置,是由元素的hashCode决定,位置是固定的。
实现类
1.基于List接口实现的类。
1.linkedList
基于链表实现,链表内存是散列的,增删快,查询慢
2.ArrayList
基于数组实现的,非线程安全,效率高,查询快,增删慢
3.Vector
基于数组实现的,线程安全,效率低,增删慢,查询慢,用到很少
2.基于Set接口实现的类。
1.HashSet
基于HashMap实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
2.LinkedHashSet
继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap。
3.基于Map接口实现的类。
1.HashMap
基于 hash 表的 Map 接口实现,非线程安全,高效;
2.HashTable
线程安全,效率低,不支持null键和值
3.LinkedHashMap
是 HashMap 的一个子类,保存了记录的插入顺序;
4.SortMap接口
TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序
区别
List
-
允许重复对象
-
可以插入多个null元素
-
是一个有序容器
Set
-
不允许重复对象
-
无序容器,无法保证每个元素的存储顺序,TreeSet通过Comparator或者Comparable维护了一个排序的顺序
-
只允许一个null元素
Map
-
Map不是Collection的子接口或者实现类,Map是一个接口。
-
Map的键对象必须唯一,只允许存在一个null键。
-
TreeMap通过Comparator或者Comparable维护了一个排序的顺序。