Java集合之深度剖析集合架构

Java集合之深度剖析集合架构

游戏|数码彩彩2024-04-27 7:41:17447A+A-

本文参考自阿里孤尽老师的《码出高效代码》一书的第六章,为了节省大家学习时间,在这里对重要知识进行了总结,如果有知识点不明白的可以关注作者,找作者要相关的具体学习资料(免费送上)。

一些大公司面试总会问一些JAVA集合相关的知识,如ArrayList实现原理、HashMap实现原理等。所以作者准备做一个针对Java集合进行剖析的专题(后续几篇文章会全部围绕Java集合展开)。

本篇文章没有对Java集合中的具体某个集合做详细剖析,只是让大家对Java集合有个宏观把控,为后面的学习做铺垫。

Java集合架构图

月薪3万以上的程序员必备技能:Java集合之深度剖析集合架构

Java集合框架图

如上图所示,框架图主要分为两大类,第一类是按照单个元素存储的Collection,在继承树中List、Set及Queue都实现了Collection接口,第二类是按照Key-Value存储的Map。以上两类集合体系,无论在数据存取还是遍历,都存在非常大的差异(图中灰色代表早期线程安全的类,目前基本已弃用)。

List集合

List集合是线性数据结构的主要实现。常见List集合:ArrayList和LinkedList。

  • ArrayList:容量可以改变的非线程安全集合。采用数组作为内部存储方式,扩容时需要把原有数据复制到新数组中。支持快速随机访问,但是插入或删除元素速度慢(这个过程可能需要移动其他元素)。
  • LinkedList:双向链表。插入和删除元素速度比ArrayList更快,但是随机访问速度比较慢实现了Queue接口(同时具备队列和栈的性质)。优点:可以将内存中零散的空间通过引用的方式关联在一起,内存利用率高

Queue 集合

Queue(队列)是一种先进先出的线性数据结构,只允许在一端进行获取操作,在另一端进行插入操作。如BlockingQueue(阻塞队列)由于其FIFO和阻塞特性,在高并发场景下常常被作为Buffer(数据缓冲区)使用。

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有序。底层为树结构,在添加新元素到集合中时,按照某种比较规则将其插入合适位置,保证插入的集合是有序的。

注:由于Map是哈希结构,在插入元素的时候会根据Key的哈希值匹配一个位置,不是按照插入顺序排列的,所以在无特殊处理的情况下是无序的。

Set 集合

Set集合是不允许重复元素的集合类型。常见Set集合:HashSet、TreeSet、LinkedHashSet。

  • HashSet: 内部使用HashMap实现,只是Value固定为一个静态对象。
  • TreeSet: 内部使用TreeMap实现。
  • LinkedHashSet: 继承自HashSet,内部使用链表维护元素插入顺序。

最后,希望读者通过本篇文章对Java集合有个整体认知,后续发布针对Java集合的使用规范,实现原理等层面进行剖析,让大家彻底搞懂Java集合!!!

END

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈