粗略看了下集合类的常用类,没耐心看源码,看了到面试那会也忘了,就简单记录下各个类的基本特点吧(摸鱼真爽)
先来张架构图撑下场面,好看的
List
接口特性:有序的,元素可重复,允许元素为null
ArrayList 🔥
- 底层结构是数组,初始容量为10,每次扩容1.5倍
- 在增删时,用的是数组复制System.arraycopy方法,是native方法,效率不错
- 适合随机查找和遍历,不适合插入和删除
- 非线程安全
LinkedList 🔥
- 底层结构是双向链表
- 实现Deque接口,可以像栈和队列操作它
- 适合插入和删除,不适合查找
- 非线程安全
Vector
- 底层结构是数组,初始容量为10,每次扩容2倍
- 线程安全,但不推荐,可以使用List list = Collections.synchronizedList(new ArrayList(…));
Map
存储key-value键值对,没有实现Collection接口
HashMap 🔥
- 底层结构是散列表+红黑树,初始容量为16,装载因子0.75,每次扩容2倍
- key不可重复,允许key和value为null
- 存储无序
- 非线程安全
LinkedHashMap
- 底层结构是散列表+红黑树+双向链表,父类是HashMap
- 允许key和value为null
- 插入有序
- 提供两种遍历顺序,访问顺序和插入顺序(默认)
- 非线程安全
TreeMap 🔥
- 底层结构是红黑树
- 不允许key为null
- 使用Comparator/Comparable实现排序
- 可以根据key进行排序,默认使用key的自然排序
- 非线程安全
Hashtable
- 底层结构是散列表
- 不允许key或value为null
- 线程安全,但效率低,已过时
ConcurrentHashMap
- 底层结构是散列表+红黑树
- key和value都不能为null
- 使用锁分段技术保证线程安全
Set
Set接口特性:不允许重复的数据。检索效率低下,删除和插入效率高
HashSet 🔥
- 底层结构是哈希表+红黑树
- 无序
- 数据可为null
- 非线程安全
TreeSet
- 底层结构是红黑树
- 有序,可实现排序功能
- 数据不可为null
- 非线程安全
LinkedHashSet
- 底层结构是哈希表+双向链表,父类是HashSet
- 无序
- 数据可为null
- 写入比HashSet强,新增和删除比HashSet差
- 非线程安全
参考链接