List接口特点:有序,有索引,允许重复元素
Set接口特点:无序,无索引,不允许重复元素 (注:TreeSet/MapSet是无序、二叉树排序)
Map接口特点:(双列)无序,无索引,不允许重复键值
LinkedHashSet:extends HashSet 底层是哈希表(数组+链表/红黑树)+链表:多了一条链表,保证元素有序
LinkedHashMap:extends HashMap 同上,底层是哈希表+链表:保证元素有序
注意:有序、无序及排序性质的差别:
集合的有序、无序是指插入元素时,保持插入的顺序性,即先插入的元素优先放入集合前部。
而排序是指插入元素后,集合元素是否自然排序(升序降序)。
HashMap、 HashSet、 Hashtable 等基于哈希存储方式的集合是无序的。其它的集合都是有序的。
TreeMap TreeSet 是基于二叉树排序的。
注:Hashtable是线程安全的集合(单线程集合),速度慢,且不可存储null值/null键
(Hashtable子类Properties集合是唯一与IO流相结合的集合)
Hash表(包括HashSet、HashMap) 查询速度快
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表/红黑树(链表长度>8)
JDK9中,List/Set/Map接口增加了静态方法of,可以给集合一次性添加多个元素
注:1.of方法不适用与该接口实现类
2.of方法返回值是不可改变的集合,即集合不能再使用add/put方法添加元素
3.Set接口和Map接口调用of方法时,不可添加重复元素
Collections集合工具类:
Collections.addAll(list,"a","b","c","d","e"); 向集合中添加多个元素
Collections.shuffle(list); 打乱集合中元素的顺序
Collections.sort(list); 对集合元素进行排序(默认升序)
修改排序规则的两种方法:(常用1)
1.Comparable 自己(this)和别人(参数)比较
自己需要实现Comparable接口,重写比较规则compareTo方法
2.Comparator 找一个第三方裁判 比较两者
使用匿名内部类重写Comparator方法:Collections.sort(list,new Comparator<..>(){...});