今天使用Set的时候想起了之前发现的一个问题。使用Eclipse的自动生成代码功能的时候,hashCode()和equals()一直是同时生成的。在调用Set.add()方法向Set中添加元素的时候需要进行判断,如果添加的元素重复的话将返回false。之前吃过一次亏,知道了调用这个方法的时候需要调用Set声明的数据类型的hashCode()或者equals()之一才能正常实现,但是由于两个方法一直是同时被IDE生成的,并不知道具体是调用的哪一个。今天Debug的时候终于弄清楚了。
这里我们就见到了key.hashCode()方法,在这里调用最开始的Set中的对象的hashCode()方法。这里的hash()方法是Java8的版本,在之前的基础上更进一步进行了对哈希值的分散性处理。putVal()判断先前的HashSet中是否存在此元素,依据是hash(key)和key。
因此,之后需要调用Set.add()方法时,至少要在自己的对象类中实现HashCode()才能执行。