2 tianzelisaone tianzelisaone 于 2015.06.07 15:01 提问

Hashmap cotainskey 结果有问题

package Hashmap;

import java.util.*;

public class HashMapDemo {
public static void main(String args[]) {
// create hash map
HashMap> TT = new HashMap<>();
ArrayList gIds = null;
Test t1=new Test(0, 1, 0, 0, 0);
Test t2=new Test(0, 1, 0, 0, 0);
TT.put(t1, gIds);

   if (!TT.containsKey(t2)) {
        System.out.println("不含");
    } else {
        gIds = TT.get(t2);
        System.out.println("找到");
    }

}

}
class Test{
public int a;
public int b;
public int c;
public int d;
public int e;
public Test(int a,int b,int c,int d,int e){
this.a=a;
this.b=b;
this.c=c;
this.d=d;
this.e=e;
}
}

输出的结果是不含,请问为什么,我该怎么改呢?

2个回答

devmiao
devmiao   Ds   Rxr 2015.06.07 15:15
已采纳

需要重写equals,否则比较的是引用,不是你的属性。

tianzelisaone
tianzelisaone containskey要用到equals比较么?
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.06.07 15:22

需要,因为你的Key是Test类型的。

yllcxsj
yllcxsj 回复tianzelisaone: 我替喵神M回答吧,虽然这里hashCode方法不会不影响结果,最好也重写hashCode()方法。保证java对象数据一致,这也是编程中的一种规范
2 年多之前 回复
tianzelisaone
tianzelisaone 回复苏小喵: 好的,我试一下,感谢你
2 年多之前 回复
devmiao
devmiao 回复tianzelisaone: 是的,你可以返回a+b+c+d+e
2 年多之前 回复
tianzelisaone
tianzelisaone hashcode也需要重写么?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片