hashSet集合在添加元素的时候首先比较hashCode,如果hashCode相等在调用equals方法,哈希值是按照哈希算法得到的一个值,可以理解为对象分配 内存空间首地址,不同对象的哈希值都不一样,hashSet结构里存储的是不同的对象,所以说一般情况下,只要定义一个对象都能存储到hashSet集合中(常数,字符,字符串除外)。实际的使用中我们认为相同的对象,在计算机看来也是不同的,因为对象分配的空间都是不一样的,hashCode也是不一样的。这个时候就需要在hashCode中增加人为因素,复写hashCode方法。hashCode值系统相同后,还不一定是相同的对对象,这个时候还要调用equals方法。只有hashCode一样,equals返回true时,计算机才认为是相同的对象,所以在使用hashSet集合存储对象的时候,这个对象一般都要复写hashCode和equals方法,在这JDK手册中也有特别说明。 |