集合总结

一、Collection详解

集合总结

(一)List 有序,可重复

ArrayList

优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程不安全,效率高

Vector

优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程安全,效率低

LinkedList

优点: 底层数据结构是链表,查询慢,增删快。 缺点: 线程不安全,效率高

(二)Set 无序,唯一

HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet 底层数据结构是红黑树。(唯一,有序)

  1. 如何保证元素排序的呢? 自然排序 比较器排序
    2.如何保证元素唯一性的呢? 根据比较的返回值是否是0来决定

(三)TreeSet, LinkedHashSet and HashSet 的区别

1. 介绍

TreeSet, LinkedHashSet and HashSet 在java中都是实现Set的数据结构
TreeSet的主要功能用于排序
LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)
HashSet只是通用的存储数据的集合
2. 相同点

Duplicates elements: 因为三者都实现Set interface,所以三者都不包含duplicate elements
Thread safety: 三者都不是线程安全的,如果要使用线程安全可以Collections.synchronizedSet()
3. 不同点

Performance and Speed: HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序
Ordering: HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则
存储null:HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null数据时会报NullPointerException

(四)针对Collection集合我们到底使用谁呢?

唯一吗?

是:Set

排序吗?

是:TreeSet或LinkedHashSet 否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。

要安全吗?

是:Vector 否:ArrayList或者LinkedList

查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。

二、Map

集合总结
Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

TreeMap是有序的,HashMap和HashTable是无序的
其余相关信息在上次hashmap博客都有提及。