本文参考自阿里孤尽老师的《码出高效代码》一书的第六章 , 为了节省大家学习时间 , 在这里对重要知识进行了总结 , 如果有知识点不明白的可以关注作者 , 找作者要相关的具体学习资料(免费送上) 。一些大公司面试总会问一些JAVA集合相关的知识 , 如ArrayList实现原理、HashMap实现原理等 。所以作者准备做一个针对Java集合进行剖析的专题(后续几篇文章会全部围绕Java集合展开) 。
本篇文章没有对Java集合中的具体某个集合做详细剖析 , 只是让大家对Java集合有个宏观把控 , 为后面的学习做铺垫 。
Java集合架构图
文章插图
Java集合框架图
如上图所示 , 框架图主要分为两大类 , 第一类是按照单个元素存储的Collection , 在继承树中List、Set及Queue都实现了Collection接口 , 第二类是按照Key-Value存储的Map 。以上两类集合体系 , 无论在数据存取还是遍历 , 都存在非常大的差异(图中灰色代表早期线程安全的类 , 目前基本已弃用) 。
List集合List集合是线性数据结构的主要实现 。常见List集合:ArrayList和LinkedList 。
- ArrayList:容量可以改变的非线程安全集合 。采用数组作为内部存储方式 , 扩容时需要把原有数据复制到新数组中 。支持快速随机访问 , 但是插入或删除元素速度慢(这个过程可能需要移动其他元素) 。
- LinkedList:双向链表 。插入和删除元素速度比ArrayList更快 , 但是随机访问速度比较慢 。实现了Queue接口(同时具备队列和栈的性质) 。优点:可以将内存中零散的空间通过引用的方式关联在一起 , 内存利用率高 。
Map 集合Map集合是以Key-Value键值对作为存储元素的哈希结构 , Key按照某种哈希函数计算后是唯一的 , Value则是可以重复的 。Map提供了keySet()、values()、entrySet()三种视图 , 分别用来查看所有key、value、键值对 。常见Map集合:HashMap、HashTable、ConcurrentHashMap、TreeMap 。
- HashMap:非线程安全 , Key无序 。
- HashTable:线程安全 , Key无序 。由于效率低 , 基本已被淘汰 。
- ConcurrentHashMap:线程安全 , Key无序 。推荐多线程环境下使用 。
- TreeMap:线程安全 , Key有序 。底层为树结构 , 在添加新元素到集合中时 , 按照某种比较规则将其插入合适位置 , 保证插入的集合是有序的 。
Set 集合Set集合是不允许重复元素的集合类型 。常见Set集合:HashSet、TreeSet、LinkedHashSet 。
- HashSet: 内部使用HashMap实现 , 只是Value固定为一个静态对象 。
- TreeSet: 内部使用TreeMap实现 。
- LinkedHashSet: 继承自HashSet , 内部使用链表维护元素插入顺序 。
END
【Java集合之深度剖析集合架构】
推荐阅读
- 神农架白化动物之谜 神农架白化动物图片
- 全国网媒陕西行,茯茶之源体验古茶制作工艺
- 二十四节气之小暑:小暑大暑,上蒸下煮
- 几杯清茶 品茶味外之味
- 长溪村高山绿茶,婺源高山绿茶之珍品
- 云南广南,茶业成富民强县五大产业之
- 频繁在D档N档之间切换,是否会弄坏电磁阀?
- 新昌,开启中国县级茶业航母之征程
- 茶之约,茶友齐聚品茶会品评新茶
- 求职|势商之城市篇:解决你人生中所有的城市选择问题(干货)