Java集合体系总结

一、Collection(单列集合)

List 有序 可重复

1
2
3
ArrayList 底层是数组 查找快,增删慢 线程不安全,效率高
LinkedList 底层是链表 查找慢,增删快
Vector 底层是数组 查找快,增删慢 线程安全,效率低

Set 无序 不可重复

1
2
3
4
5
6
7
8
9
10
11
HashSet 底层是哈希表
如何保证元素的唯一性
重写元素的hashcode和equals方法
hashcode相同 判断equals方法 返回true 不填加
返回false 添加
hashcode不相同 直接添加
TreeSet 底层是二叉树
如何保证元素的唯一性和排序
1、自然排序(元素具备比较特性) ----实现Comparable接口
2、使用排序器(集合具备比较特性) ---- 实现Comparator接口

二、Map(双列集合)

数据结构只针对键有效

1
2
3
4
5
6
7
8
9
10
11
HashMap 底层是哈希表
如何保证键的唯一性
重写元素的hashcode和equals方法
hashcode相同 判断equals方法 返回true 不填加
返回false 添加
hashcode不相同 直接添加
TreeMap 底层是二叉树
如何保证键的唯一性和排序
1、自然排序(元素具备比较特性) ----实现Comparable接口
2、使用排序器(集合具备比较特性) ---- 实现Comparator接口

功能

1
2
3
4
5
6
7
8
Collection
add(Object obj) remove(Object obj) contains(obj) size() iterator()
List add(int index,Object obj) remove(int index) get(index) set
Set
Map
put(key,value) remove(key) get(key) containsValue(value) containsKey(key)
get(key) keySet() values() entrySet()

遍历

1
2
3
4
5
6
7
8
List
1、迭代器 使用迭代器遍历集合时,不能通过集合对象去修改集合元素
2、for循环
3、增强for循环
仅仅是遍历集合,任选一种,
如果要对集合元素进行操作,使用后面两种
跟集合索引相关的操作,使用for循环
1
2
3
Set
1、迭代器
2、增强for循环
1
2
3
Map
1、获取键集合,根据键找值
2、获取键值对集合,根据键值对对象获取键和值

怎么选择

先看有没有对应关系(是否需要键值对)

1
2
3
4
5
6
7
8
9
10
11
12
有 Map
是否需要对键排序 需要 TreeMap
不需要 HashMap
没有 Collection
是否要求元素唯一
是 Set 不是 List
是否对元素进行排序 增删多,查找少 LinkedList
是 TreeSet 增删少,查找多 ArrayList或者Vector
不是 HashSet 如果线程安全 Vector
不需要保证线程安全 ArrayList
坚持原创技术分享,您的支持将鼓励我继续创作!
0%