我想知道是否有人可以详细解释什么
(int)(l ^ (l >>> 32));
在下面的hashcode实现中(由eclipse生成,但与Effective Java相同):
private int i;
private char c;
private boolean b;
private short s;
private long l;
private double d;
private float f;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + s;
result = prime * result + (b ? 1231 : 1237);
result = prime * result + c;
long t = Double.doubleToLongBits(d);
result …Run Code Online (Sandbox Code Playgroud) 可能重复:
hashCode()是如何用Java计算的
我发现Java中hashCode(?的根类方法没有实现Object:
public native int hashCode();
Run Code Online (Sandbox Code Playgroud)
如果我有一个Object a和一个Object b,我如何知道a.hashCode()和b.hashCode()价值而不使用System.out.println()?只是通过hashCode实施.
我尝试了new两个ArrayList对象,令我惊讶的是,hashCode()值是相同的:它们都是1.
首先在HashSet中添加元素并打印HashSet的大小,该大小按预期返回.但我修改了一个对象值并再次存储到HashSet并使用对象名称删除对象.但我仍然和以前一样大小.我的代码如下:
public class Test {
private String s;
public Test(String s){
this.s = s ;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Object> hs = new HashSet<Object>();
Test t1 = new Test("Keval");
Test t2 = new Test("Keval");
String s1 = new String("Keval");
hs.add(t1);
hs.add(t2);
hs.add(s1);
System.out.println("Set Size :: " + hs.size());
s1 = new String("Demo");
hs.remove(s1);
System.out.println("Set Size :: " + hs.size());
}
}
Run Code Online (Sandbox Code Playgroud)
上述代码的输出是:
Set Size :: 3
Set Size :: 3 // Why …Run Code Online (Sandbox Code Playgroud)