本文参考自阿里孤尽老师的《码出高效代码》一书的第六章,为了节省大家学习时间,在这里对重要知识进行了总结,如果有知识点不明白的可以关注作者,找作者要相关的具体学习资料(免费送上)。
一些大公司面试总会问一些JAVA集合相关的知识,如ArrayList实现原理、HashMap实现原理等。所以作者准备做一个针对Java集合进行剖析的专题(后续几篇文章会全部围绕Java集合展开)。
本篇文章没有对Java集合中的具体某个集合做详细剖析,只是让大家对Java集合有个宏观把控,为后面的学习做铺垫。
Java集合框架图
如上图所示,框架图主要分为两大类,第一类是按照单个元素存储的Collection,在继承树中List、Set及Queue都实现了Collection接口,第二类是按照Key-Value存储的Map。以上两类集合体系,无论在数据存取还是遍历,都存在非常大的差异(图中灰色代表早期线程安全的类,目前基本已弃用)。
List集合是线性数据结构的主要实现。常见List集合:ArrayList和LinkedList。
Queue(队列)是一种先进先出的线性数据结构,只允许在一端进行获取操作,在另一端进行插入操作。如BlockingQueue(阻塞队列)由于其FIFO和阻塞特性,在高并发场景下常常被作为Buffer(数据缓冲区)使用。
Map集合是以Key-Value键值对作为存储元素的哈希结构,Key按照某种哈希函数计算后是唯一的,Value则是可以重复的。Map提供了keySet()、values()、entrySet()三种视图,分别用来查看所有key、value、键值对。常见Map集合:HashMap、HashTable、ConcurrentHashMap、TreeMap。
注:由于Map是哈希结构,在插入元素的时候会根据Key的哈希值匹配一个位置,不是按照插入顺序排列的,所以在无特殊处理的情况下是无序的。
Set集合是不允许重复元素的集合类型。常见Set集合:HashSet、TreeSet、LinkedHashSet。
最后,希望读者通过本篇文章对Java集合有个整体认知,后续发布针对Java集合的使用规范,实现原理等层面进行剖析,让大家彻底搞懂Java集合!!!
END