List:
(1)ArrayList:
优点:底层数据结构为数组,查询快,增删慢,效率高。
缺点:线程不安全。
(2)LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
优点:磁层数据结构为链表,查询慢,增删快,效率高。
缺点:线程不安全。
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
优点:底层数据结构为数组,查询快,增删慢。
缺点:线程安全,效率低。
Map:
(1)HashMap:
1)采用哈希表算法,此时Map中的key不会保证添加的先后顺序,key不允许重复。
2)key判断重复的标准是key1和key2是否equals为true,并且hashCode相等。
(2)LinkedHashMap
1)采用链表和哈希表算法,此时Map中的key会保证添加的先后顺序,key不允许重复。
2)key判断重复的标准是key1和key2是否equals为true,并且hashCode相等。
(3)HashTable:
1) 采用哈希表算法,所有方法都使用synchronized修饰符,线程安全的,但是相对HashMap性能较低。
(4)TreeMap:
1)采用红黑树算法,此时Map中的key会按照自然顺序或定制排序进行排序,key不允许重复。
2)key判断重复的标准是compareTo/compare的返回值是否为0。
Set:
(1)HashSet:
1) 不能保证元素的顺序,不可重复,不是线程安全的,集合元素可以为NULL。
2) 底层数据结构为数组,查询快,增删慢。
3) 两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同。
(2)LinkedHashSet:
1) 不可重复,有序。
2) 底层使用链表和哈希算法。链表保证元素的添加顺序,哈希表保证元素的唯一性。
(4)TreeSet:
1)有序,不可重复,底层使用红黑树算法,擅长范围查询。
2)如果使用TreeSet无参构造器创建一个TreeSet对象,则要求放入其中的元素的类必须实现Comparable接口,所以其中不能放入null元素。
3)必须放入同样类的对象,因为默认会进行排序,否则可能会发生类型转换异常,我们可以使用泛型来进行限制。