常见的Collection的实现体系

注释:蓝色表示实现类,红色框表示接口

Set接口)

    Set接口的存储形式是不允许元素重复,并且不记录数据存入的先后顺序。而list接口的存储形式允许元素重复,并且记录数据存入的先后顺序。我们知道list接口的实现类是基于数组存储的,每存入一个数据,其将会根据索引存入数组相应的位置。其实set接口的实现类也是基于数组存储的,但他存储时并不会直接按索引去存储数据,而是先检测数据是否重复(为什么存在这种结构,例如存储学号,就不允许重复,如果我们使用list还得自己去写重复检测机制),如果不重复则添加数据。而添加时,他是根据hash算法添加的,即每个对象都有自己的hashCode,我们可以根据hashCode去寻找索引,即对象——hashCode——索引(此处横线表示一种映射),这样一来我们就说其实Set也是基于数组存储的,他有什么好处呢:

比如说: 0 9 78 23

如果我么用数组查询一个23的索引,则我们用for如循环循环四次,遍历即可,

但如果我们用hash查找时只需index=F(hashCode),hashCode=F(对象);通过计算即可。

问题:我们想set集合中添加基本类型时,set是如何判断两个元素是否相同的?

    

运行结果:

如此说明斯特中是靠判断equals和hashCode两个标准判定的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章