Java集合Collection、List、Set区别与详解
Collection
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
List、Set的详解
一、List(有序可重复的)
1、List有三个常用的实现类ArrayList,LinkedList,Vector
- ArrayList集合底层是数组。非线程安全。适合查询,不适合频繁的随机增删元素。
- ArrayList集合底层默认初始化容量是10,扩大之后的容量是原容量的1.5倍。
- LinkedList 的底层数据结构是双向链表,链表适合频繁的增删元素,不适合查询操作。
- Vector集合底层是数组,线程安全。
- Vector集合底层默认初始化容量是10,扩大之后的容量是原容量的2倍。
2、如果优化ArrayList和Vector?
- 尽量减少扩容操作,因为扩容需要数组拷贝。数组拷贝很耗内存。
- 一般推荐在创建集合的时候指定初始化容量。
3、ArrayList 和 LinkedList 的区别
- ArrrayList底层的数据结构是数组,支持随机访问。
- LinkedList 的底层数据结构是双向链表,不支持随机访问。
- 使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。
二、Set(无序不可重复)
1、Set常用的有一个实现类HashSet和一个子接口SortedSet
- HashSet底层实际是一个HashMap,HashMap底层采用的是哈希表数据结构。
- HashSet其实是HashMap中的key部分。HashSet有什么特点,HashMap中的key应该具有相同的特点。
- 存储在HashSet集合或者HashMap集合部分的元素,需要同时重写hashCode和equals方法。
- SortedSet:无序不可重复,但存进去的元素可以按照元素大小顺序自动排列。
2、HashSet 的实现原理
- HashSet底层由HashMap实现
- HashSet的值存放于HashMap的key上
- HashMap的value统一为PRESENT
3、SortedSet集合存储元素为什么可以自动排序?
- 因为被存储的元素实现了Comparable接口,SUN编写TreeSet集合在添加元素的时候,会调用CompareTo方法完成比较。
- 单独编写比较器,创建类并实现Comparator接口。(推荐)