集合中的set
直接上代码截图
第一次的输出:(都知道不解释)
第二次的输出:
在第一次插入之后,对p1的属性进行的重新的赋值,这个时候p1在set中的存放的位置不变。
重点–> 使用set来储存或者移除对象的时候,都会进行对象的哈希值的计算,来变来确定次对象储存的位置。这个也就是在进行频繁的查询的时候,set带来的优点。
也正是这样原因,在进行移除的时候,计算的是(1001 , ”CC“)的值。这个时候计算出来的值就不是存放p1的值(p1的存放位置是(1001 , “AA”))。
所以此时的p并没有移除。
第三次的输出:
这个时候进行插入的是
set.add(new Person(1001,“CC”));
这个时候计算的位置并没有存放任何的对象。这个时候就顺利的插入了。
第四次的输出:
set.add(new Person(1001,“AA”));
还是一样的会进行哈希值的计算,这个时候计算的位置就是p1对象的 位置,因为哈希值相同,并且这个位置上已经有了对象。这个时候就要进行
equals()进行比较。判断这两个对象的属性值是否相等。因为这两个的对象的属性值不等。所以这个时候也就存放成功。
所以最后的答案是