建议最好看一些hashset的源码和哈希表相关的知识。首先,hashset存储是通过entry数组实现的,数组的一个元素指向一个由相同hash值对象组成的链表(也就是说这里哈希表解决冲突的方法采用的是拉链法)。所以,如果hash值不一致,说明这个hash值所对应的链表还不存在,所以直接加进去就行。如果一致,说明已经存在该链表,那就要看这个key是否已经存在,如果这个key不存在,那么将这个对象加入该hash值对应的链表中,如果这个key存在,那么更新这个key对应的value。
覆盖hashCode方法,但不覆盖equals方法,仍然会导致数据的不唯一性
class Point {
private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public String toString() {
return "x:" + x + ",y:" + y;
}
}
输出结果
false
x:1,y:1
x:1,y:1
http://blog.csdn.net/lijiecao0226/article/details/24609559
我复制的给你个链接看看上面说的很详细