数组特点:有序,可重复,有下标
Collection 顶级接口,
List :Collection 下的子接口,
ArrayList,LinkedList,vector 都是 List 接口下的实现类
ArrayList :有序可重复,有下标,线程不安全,
存储结构:数组
默认长度:10
扩容机制:原长+(原长>>1)
LinkedList : 有序,可以使用for循环遍历
数据结构:双向链表(node、prev、item、next) 没有默认长度,也没有扩容机制
ArrayList 与 LinkedList 的区别:
当向头部添加大量数据时,LinkedList 有明显的优势。
vector :有序可重复,由下标
和 ArrayList 底层基本相同,
线程安全,
存储结构:数组
默认长度:10
扩容机制:步长为0时,扩容为原长2倍
步长不为0时,原长+步长
Set : Collecion 下的子接口
HashSet,LinkedHashSet 都是 Set 接口下的实现类
HashSet:无序且不可重复
Map : 顶级接口,与Collection 同级
HashMap,HashTable,ConcurrentHashMap 都是 Map 接口下的实现类
HashMap:键值对存储 查询快
存储结构:数组+链表(entry[ ])
默认长度:16
扩容方式:创建一个长度为原长2倍的新entry[ ] 数组,将数组中的每一个entry对象以hash 和新数组长度重新计算求模,计算出每个对象在新数组中链的下标,将每一个对象重新存入到新的数组中去
HashTable:键值对
存储结构:数组+链表
默认长度:11
扩容机制:原长度左移一位+1
HashMap 与 HashTable 的区别:
1.默认长度不同(16 / 11)
2.线程不安全 / 线程安全
3.允许 null 键 null 值 / 不允许 null 键 null 值
4.扩容条件:元素个数达到数组长度*加载因子 && 对应链不为空 / 只要元素个数大于等于数组长度*加载因子就会扩容
5.扩容为原数组2倍 / 原长度左移一位 + 1
ConcurrentHashMap :分段锁
数据结构:Segment [ ] --->Segment 类似于 HashTable ,实现线程安全的方式和HashTable 不同,HashTable 是通过同步锁来实现的,而Segment 是通过trylock()来实现的。
有序的Map:TreeMap、LinkedHashMap