Java容器解析系列(0) 开篇
最近刚好学习完成数据结构与算法相关内容:
Data-Structures-and-Algorithm-Analysis
想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻,且在网上找了半天没有找到太好的关于容器类细节的讲解(其中找到一些博客,讲得很好,但是其中还是有些东西没有触碰到我原来的理解痛点),还是决定自己写一个Java容器解析系列.
《Java编程思想》书中对容器进行完整的类关系图如下:
官方文档:Java Collection Framework
本系列将对上图中的类和接口进行分析.
备注:Collection,国内的书籍翻译都为集合,个人认为欠妥,原因如下:
- 按照collect翻译为收集的概念,Collection翻译为聚集更加合理.
- Collection更多的是表示一种类与类的关系,参考文章java 类之间的四种关系详解,Collection翻译为聚合更为贴切。
- 集合,是一个数学概念,其英文翻译为Set,是集合论的主要研究对象。而Set在jdk中已有了归属,且其意义更接近数学中的集合,比如,数学中的集合的两种特性:
- 互异性:一个集合中,任何两个元素都认为是不相同的,有时需要对同一元素出现多次的情形进行刻画,可以使用多重集
- 无序性:一个集合中,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。
这两个特性和jdk中的Set更符合.
但是由于Collection翻译为集合被广泛应用,这里为了避免阅读困难,依然将Collection翻译为"集合".
针对具体的集合类,本系列将从以下方面进行分析:
- 使用的数据结构及其特性(数组,链表,树,堆,邻接矩阵等)
- 增删改查实现及时间复杂度(包括迭代器实现等)
- 使用场景
- 特殊机制(扩容,rehash,弱引用的对象回收等)
- 面试相关
本系列分析的源码为sun jdk7 的源码,如果某个集合类在之后有过大的修改,也会抽出来分析
jdk8中添加了很多新特性,但个人认为对研究集合原理似乎没有帮助
Let's go change the world,or changed by the world