Java集合框架
2021-09-17 00:11:35 7 举报
AI智能生成
Java集合框架,如有错误请指正
作者其他创作
大纲/内容
Collection
List
ArrayList
底层实现:数组
查询快,增删慢
非线程安全
扩容:初始化为0,第一次10,之后1.5倍
LinkedList
底层实现:双向链表
非线程安全
Vector
线程安全,方法由synchronized修饰
多线程
底层实现:数组
查询快,增删慢
扩容机制:初始化为10,之后2倍
Stack
先进后出FILO
继承自Vector,底层实现一致
Set
HashSet
底层实现:HashMap,key为set的元素,value为空的object对象
可以存放一个Null值
LinkedHashSet
底层实现LinkedHashMap
HashSet的子类
数组+双向链表
TreeSet
底层实现TreeMap
Map
HashMap
非线程安全
底层实现
JDK1.7 数组+链表
JDK1.8 数组+链表+红黑树
扩容机制
第一次添加:
哈希桶初始化为16,负载因子默认值为0.75
之后添加:
哈希桶每次2倍扩容
哈希桶初始化为16,负载因子默认值为0.75
之后添加:
哈希桶每次2倍扩容
什么时候
链表会变成红黑树
链表会变成红黑树
当一个桶中的元素>8
并且哈希桶桶的个数>=64
并且哈希桶桶的个数>=64
什么时候
红黑树会变成链表
红黑树会变成链表
当红黑树中的节点<=6时
会转换成链表
会转换成链表
扩容时和移除节点时会检测是否需要转换
hashMap的死循环问题
JDK8-在多线程的情况下,红黑树的节点r=r.parent.parent
所以查找根节点死循环
所以查找根节点死循环
JDK7-多线程情况下,两个HashMap扩容
最后会导致链成循环的,造成死循环
最后会导致链成循环的,造成死循环
LinkedHashMap
底层结构
HashMap+LinkedList
哈希+双向链表
集合有序
非线程安全
TreeMap
有序集合,通过红黑树实现
key必须实现comparable接口,否则会抛出异常
非线程安全
HashTable
数组+链表
线程安全
通过方法上添加synchronized实现
扩容机制
初始化容量为11
之后每次table扩容为原来的2n+1
Properties
线程安全
经常读取配置文件等
0 条评论
下一页