Set集合添加数据流程

首先通过实现集合类对象,set会创建一块空间set底层是个数组,但是每个元素为一个node链表

node

然后调用add(“hello”)方法添加数据,set会把每个添加的数据转化成hashcode码,然后对空间个数进行取余

(hello)hashcode   %    空间个数  =  数据索引位置

Set集合添加数据流程_第1张图片

在此添加数据add("java"),如果返回的hashcode值与空间个数取余后与(hello)位置所相同,则会放在与hello同一位置,向下延伸形成竖行单向链表(set集合是不允许存在相同数据的,(java)得到与(hello)相同地址后,必须通过equals方法遍历整个竖行链表,防止重复,通过hashcode值对空间大小取余获得索引位置可以减少大量比较时间,只需要比较竖向列表中的值就好了)

Set集合添加数据流程_第2张图片

因为set集合每个元素看成一个单向链表,所以当新插入一个值时,是新创建一个node块,指向第一个插入的node块,把第一个值挤下去了

 

Set集合添加数据流程_第3张图片

当一个这个竖行单向链表达到符合计算机的标准后,会自动生成数,有效的分类,更容易执行equals()方法,增加工作效率

Set集合添加数据流程_第4张图片

你可能感兴趣的:(Set集合添加数据流程)