文章目录
- I 集合脉络
- II List 接口简介
- III Set 接口简介
- IV Map 接口简介
- V Collection 接口定义的方法
I 集合脉络
集合主要脉络 : Java 集合大的分类为两类 Collection 和 Map , Collection 下有 List , Set , Queue 三个主要接口 ;
- ① List 接口下实现的集合有 : ArrayList , Vector , Stack , LinkedList ;
- ② Set 接口下实现的集合有 : HashSet , LinkedHashSet , TreeSet ;
- ③ Queue 接口下实现的集合有 : PriorityQueue , LinkedList , 该集合即实现了了 List 接口 , 又实现了 Queue 接口 ;
- ④ Map 接口下实现的集合有 : TreeMap , HashMap , LinkedHashMap , HashTable ;
II List 接口简介
List 接口 : List 集合特点 , ① 元素排列有序 , ② 元素可重复 ;
- ① ArrayList : 底层由数组实现 , 查询速度快 , 增删速度较慢 , 线程不安全 , 效率比较高 ;
- ② Vector : 底层由数组实现 , 查询速度快 , 增删速度较慢 , 线程安全 , 效率比较低 ;
- ③ LinkedList : 底层由链表实现 , 查询速度较慢 , 增删速度很快 , 线程不安全 ;
Vector 与 ArrayList 的区别是线程是否安全 , Vector 以降低效率的代价换取线程安全 ; ArrayList 与 LinkedList 底层实现不同 , 一个是数组实现的 , 一个是链表实现的 , 如果应用环境中查询比较多 , 使用 ArrayList , 如果应用环境中增删比较多使用 LinkedList ;
III Set 接口简介
1. Set 接口 : Set 集合特点是元素不可重复 ;
- 1. HashSet : 依赖于 HashMap 实现 ;
- ① 底层实现 : 底层由哈希表实现 ;
- ② 元素排序 : 其元素排序是无序的 ;
- ③ 元素重复验证 : 每次插入元素都会使用 hashCode 和 equals 方法验证是否与已有元素重复 ;
- 2. TreeSet : 依赖于 TreeMap 实现 ;
- ① 底层实现 : 底层由红黑树实现 ;
- ② 元素排序 : 其元素通过比较器排序确定元素顺序 ;
- ③ 元素重复验证 : 每次插入元素都会使用 equals 方法验证是否与已有元素重复 ;
- 2. LinkedHashSet :
- ① 底层实现 : 底层由链表和哈希表实现 ;
- ② 元素排序 : 其元素排序是有序的 , 在插入时进行排序 ;
- ③ 元素重复验证 : 每次插入元素都会使用 hashCode 方法验证是否与已有元素重复 ;
如果要求集合中的元素唯一 , 那么使用 Set 集合 , 如果不需要排序就使用 hashSet , 如果需要排序使用 TreeSet 或 LinkedHashSet ;
2. 三种集合的使用场景 : HashSet 用于存储不能重复的数据 , TreeSet 用于排序 , LinkedHashSet 有先进先出的功能 ;
3. 插入元素速度对比 : HashSet > LinkedHashSet > TreeSet ;
4. 关于元素的空值处理 : HashSet 和 LinkedHashSet 允许有空值 , TreeSet 如果出现空值就会抛出空指针异常 ;
IV Map 接口简介
1. Map 接口的集合实现 : HashMap ( 子类 LinkedHashMap ) , TreeMap , HashTable ;
2. 排序分析 : HashMap 和 HashTable 是无序的 , TreeMap 是有序的 ;
3. 线程安全 : HashMap 是线程不安全的 ; HashTable 是线程安全的 , 其方法都是 synchronized 修饰的 ; 因此 HashMap 效率要比 HashTable 效率要高 ;
V Collection 接口定义的方法
Collection 接口定义了集合的基本操作 , 如下 :
- ① 添加删除 : 添加 , 删除 集合中的元素 ;
- ② 获取 : 获取 迭代器 , 集合大小 , 哈希码 等 ;
- ③ 判定类 : 包含判定 , 相等判定 , 空判定等操作 ;
- ④ 数组转换操作 ;
//I. 添加操作
//1. 添加单个元素
boolean add(E e)
//2. 将集合中的元素都添加到本集合中
boolean addAll(Collection<? extends E> c)
//II. 删除操作
//1. 删除单个元素
boolean remove(Object o)
//2. 删除子集合 c 中的元素
boolean removeAll(Collection<?> c)
//3. 保留本集合中含有的集合 c 中的元素 , 其它元素删除 ( 保留两集合的交集 )
boolean retainAll(Collection<?> c)
//4. 清除所有元素
void clear()
//III. 获取操作
//1. 获取迭代器
Iterator<E> iterator()
//2. 获取哈希码
int hashCode()
//3. 获取集合大小
int size()
//IV. 数组转换操作
//1. 返回包含该集合所有元素的数组
Object[] toArray()
//2. 返回包含该集合所有元素的数组, 并指定数组元素类型
<T> T[] toArray(T[] a)
//V. 判定操作
//1. 是否包含某元素
boolean contains(Object o)
//2. 是否包含某集合中的所有元素
boolean containsAll(Collection<?> c)
//3. 是否相等
boolean equals(Object o)
//4. 集合是否为空 , 如果为空返回 true
boolean isEmpty()