介绍:
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口。
- Set包含:HashSet,LinkedHashSet,TreeSet
- List包含:ArrayList,Vector,LinkedList
- Map包含:Hashtable,LinkedHashMap,HashMap,TreeMap
区别:
List:有序可重复
1.ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
2.Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
3.LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
Set :无序,唯一
1.HashSet
底层数据结构是哈希表(无序,唯一)
两个方法保证元素唯一性:hashCode()和equals()
2.LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
链表保证元素有序,哈希表保证元素唯一
3.TreeSet
底层数据结构是红黑树。(有序,唯一)
保证元素有序:自然排序、比较器排序
保证元素唯一性:根据比较的返回值是否为0来决定
Map :HashMap、TreeMap、HashTable
1.HashMap
无序,方法不同步,线程不安全,效率高
2.HashTable
无序,方法同步,线程安全,效率低
3.TreeMap
有序
总结:TreeSet、LinkedHashSet 、HashSet 的区别
1.三者在java中都是实现Set的数据结构
- TreeSet:主要用于排序,插入数据最慢
- LinkedHashSet:主要用于保证FIFO即有序的集合(先进先出)
- HashSet:通用的存储数据的集合,插入数据最快
- 三者都是线程不安全的
- HashSet和LinkedHashSet允许存在null数据,而TreeSet中插入null会报错
2.代码实现区别
public static void main(String args[]) {
HashSet<String> hashSet = new HashSet<>();
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
TreeSet<String> treeSet = new TreeSet<>();
for (String data : Arrays.asList("B", "E", "D", "C", "A")) {
hashSet.add(data);
linkedHashSet.add(data);
treeSet.add(data);
}