集合总结
文章目录
一、Collection详解
(一)List 有序,可重复
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。 缺点: 线程不安全,效率高
(二)Set 无序,唯一
HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
TreeSet 底层数据结构是红黑树。(唯一,有序)
- 如何保证元素排序的呢? 自然排序 比较器排序
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博客都有提及。