本帖最后由 student 于 2013-5-24 15:55 编辑
解答一:简而言之,就是Set集合中添加什么对象,什么对象就调用hashCode和equals方法。
以你的代码为例:
向Set集合中添加String类型的对象,所以调用hashCode和equals方法的就是String对象。
这两个方法调用的顺序和规则是:先调用hashCode方法计算每一个元素的哈希值,如果集合中有一个元素哈希值和另一个元素相同,
才再调用equals方法,如果不同则不会调用equals方法,详细分析如下: 1.当添加第一个元素"java"时,调用hashCode方法计算该元素的哈希值,第一次不会调用equals方法;
2.如果再次向Set集合中添加元素"java",调用hashCode方法获得该元素的哈希值,发现哈希值和上面的元素相同,然后调用equals方法和集合中
所有元素进行比较,发现"java"对象和Set集合中的对象相等,所以阻止第二个"java"对象添加到Set集合中,保证元素唯一性;
3.当添加"Student"时,首先用hashCode方法计算哈希值,发现哈希值和Set集合中所有元素的哈希值不同,不再调用equals方法,并将"Student"添加
到Set集合中
这就是Set集合保证元素唯一性的机制,即首先调用hashCode,再调用equals方法。
解答二:在equals方法中,this指谁?obj指谁呢?
我们知道,this指的是当前对象的引用,所以当向Set集合中添加"java"这个对象时,this指的是"java"对象,
obj指的是Set集合中其他对象。
|