java 问题 hashcode 不一致 equals方法还能为真?

2024-12-03 08:24:56
推荐回答(2个)
回答(1):

建议最好看一些hashset的源码和哈希表相关的知识。首先,hashset存储是通过entry数组实现的,数组的一个元素指向一个由相同hash值对象组成的链表(也就是说这里哈希表解决冲突的方法采用的是拉链法)。所以,如果hash值不一致,说明这个hash值所对应的链表还不存在,所以直接加进去就行。如果一致,说明已经存在该链表,那就要看这个key是否已经存在,如果这个key不存在,那么将这个对象加入该hash值对应的链表中,如果这个key存在,那么更新这个key对应的value。

回答(2):

覆盖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

我复制的给你个链接看看上面说的很详细