集合知识点梳理
2019-10-15 19:18
162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Syntactic_tang/article/details/102572967
集合在java中的结构.
父接口 Collection
子接口 List Set
实现类.
ArrayList LinkedList Vector HashSet,TreeSet,LinkedHashSet
ArrayList LinkedList Vector 区别.
Vector底层是数组.
线程安全. 速度慢.
ArrayList底层是数组.
线程不安全,查询比较速度,增删比较慢.
LinkedList底层是链表
线程不安全,增删较快,查询较慢.
HashSet,TreeSet,LinkedHashSet 区别.
不允许重复.存取无序.
HashSet本质是HashMap中的keyTreeSet基于Compartor -> compare方法
LinkedHashSet存取有序.
HashMap.
jdk1.7 -> 底层是数组 + 链表.
jdk1.8 -> 底层是数组 + 链表 + 红黑树.jdk1.8引入红黑树的原因:
当出现hash冲突|碰撞时,value会挂在数组后面的链表上.当链表长度过长时,会导致查询效率比较低. 在链表长度大于等于8时,会从链表转换为红黑树,当链表长度小于等于6时,从红黑树转为链表.jdk1.8为了实现红黑树,将Entry包装为Node.可以旋转变色.
HashMap是如何避免hash冲突出现的.
(h = key.hashCode()) ^ (h >>> 16)
HashMap线程不安全.
为什么?
Hashtable -> 效率太低.
所有写方法直接变成synchronized方法.
ConcurrentHashMap ->
jdk1.7
数组 + 链表.
Segment -> ReentrantLock
初始化了长度为16的Segment -> 将HashMap根据Hash分散到不同的Segment中.
jdk1.8
数组 + 链表 + 红黑树.
CAS + synchronized.
- 当没有hash冲突时,采用CAS乐观锁的方式,不会锁住HashMap,尝试添加.
- 当出现hash冲突时,会使用synchronized锁住链表.
相关文章推荐
- 集合的知识点梳理(List,Set,不包含泛型)
- java中关于集合的知识点梳理
- 跟着刚哥梳理java知识点——集合(十二)
- JavaScript 2018:标星知识点及次要点梳理一览
- 资源 | 8张思维导图帮你梳理深度学习&机器学习多个知识点
- C++ 零碎知识点集合
- fullcalendar日历控件知识点集合
- 南邮《汇编语言程序设计》期末复习知识点梳理
- javascript全面总结(可能别人看的有点乱,不过多看几遍就习惯了,每个*是一个知识点集合)...
- Java集合 知识点笔记(一)
- Tinking in java 琐碎知识点之集合(容器)
- HashSet集合的知识点
- MapReduce知识点梳理
- Memcache知识点梳理
- JAVA 面向对象和集合知识点总结
- Java基础--反射机制的知识点梳理
- JAVA集合和Map类关系梳理和总结
- 集合、知识点补充
- 牛腩新闻发布系统---前期知识点梳理
- Python知识点梳理-浮世绘第一节