Java集合
2021-04-07 20:44:47 0 举报
AI智能生成
Java常用集合
作者其他创作
大纲/内容
Collection
List
特性
实现了Collection接口
有序,元素可重复
允许元素为null
实现子类
Vector
底层结构是一个数组,初始容量10,每次增长2倍
线程安全的,操作方法用synchronized同步
LinkedList
实现了Deque接口,所以可以使用操作栈和队列的方法
线程不安全的
ArrayList
底层结构是数组,初始容量10,每次增长1.5倍
在增加和删除的时候,需要用到数组的拷贝和赋值,底层是native修饰的,由C实现,性能不差
线程不安全的
CopyOnWriteArrayList
在修改时候,复制出来一个新数组,修改操作在新数组中完成,最后将新数据中交由array变量指向
写枷锁,读不加锁
只能保证数据的最终一致性,不能保证实时一致性
适合读多写少的场景
Set
特性
实现了Collection接口
无序,元素不可重复
底层多试Map结构的实现
常用子类都不是线程安全的
子类实现
HashSet
底层数据结构是哈希表和红黑树组成
实际上是封装了HashMap
元素无序,可以为null
LinkedHashSet
底层数据结构是哈希表和双向链表组成
继承HashSet
实际上市LinkHashMap
元素可以为null
TreeSet
底层数据结构是TreeMap,红黑树
实现排顺序功能
元素不能为null
Map
特性
存储结构是key value键值对
底层使用红黑树,提交查询效率
HashMap
1.7
底层数据结构,数组+链表
发生哈希冲突时,插入链表使用头插法,多线程情况下,可能会出现死循环
1.8
底层数据结构,数组+链表+红黑树
链表大于8时候,将链表转换成红黑树,当红黑树为6的时候,会将红黑树转为链表
发生哈希冲突时,插入链表使用尾插法
允许key,value为null
存储无序
非线程安全的
初始容量16,装载因子0.75,每次扩容2倍
当链表元素数量大于 链表元素数量*装载因子时,发生扩容
hash计算key在数组中位置,使用了key的哈希值与该值的高16位做异或操作,增加随机性
如果计算出来的位置相同,则发生了哈希冲突
LinkedHashMap
继承HashMap
底层数据结构是数组+红黑树+双向链表
不是线程安全的
允许为null
插入有顺序
插入顺序
默认
访问顺序
符合LRU
用法和HashMap相同,内部重写了某些方法,维护双向链表
TreeMap
底层数据结构是红黑树
可以进行排序
不是线程安全的
元素不能为null
ConcurrentHashMap
底层数据结构数组+链表+红黑树
线程安全的
1.7
使用重入锁ReentrantLock + Segment
锁的粒度是Segment
1.8
synchronized + cas
锁的粒度是HashEntry
key和value都不能为null
get方法是非阻塞的
0 条评论
下一页