我想通过查询hashMap中是否以含有该对象,来决定是否需要存放入hashMap中.
我有一个类
package iss.com.equals;import java.util.Date;class CountIsable { private Date date; private String accountNo; private String bankCode;
public CountIsable(Date transactionTime, String accountNo, String bankCode) {
this.date = transactionTime;
this.accountNo = accountNo;
this.bankCode = bankCode;
} public CountIsable(String accountNo, String bankCode) {
this.accountNo = accountNo;
this.bankCode = bankCode;
} public boolean equals(CountIsable mapKey) {
if (DateUtil.compareDate(date, mapKey.getDate()) == 0
&& accountNo.equals(mapKey.getAccountNo())) {
if (mapKey.getBankCode() == null
|| mapKey.getBankCode().equals(bankCode))
return true;
}
return false;
}
public int hashCode() {
        return 1;
    } public String getAccountNo() {
return accountNo;
} public String getBankCode() {
return bankCode;
} public Date getDate() {
return date;
}}下面是测试用例
package iss.com.equals;import java.util.Date;
import java.util.HashMap;public class TestEquals { public static void main(String[] args)
{
HashMap importMap=new HashMap(8);
Date date=new Date();
String accountNo="1";
String bankCode="1";
CountIsable one=new CountIsable(date,accountNo,bankCode);
CountIsable two=new CountIsable(date,accountNo,bankCode);
CountIsable three=new CountIsable(date,accountNo,bankCode);
CountIsable four=new CountIsable(date,accountNo,bankCode);
importMap.put(one,"1");
importMap.put(two,"2");
importMap.put(three,"3");
if(importMap.containsKey(four))
{

System.out.println(importMap.size());
System.out.println("--------------"+(String)importMap.get(one));
}
else
{
System.out.println("no object!");
}

}
}
程序输出为no object!,是什么原因导致key找不到

解决方案 »

  1.   

    你生成了四个CountIsable 对象,但只把前三个put进了hashMap,第四个对象又没有放进去,当然是no object 了。
      

  2.   

    少放一个CountIsable 对象.
                       importMap.put(one,"1");
    importMap.put(two,"2");
    importMap.put(three,"3");
                      importMap.put(four,"4");//加上就行了!
    if(importMap.containsKey(four))
      

  3.   

    不是这个意思,我放的前三个对象(key)不都是一样的吗,我想判断key中是否有相同的key对象,如果有就不put了
      

  4.   

    ^_^,它是换成hashcode然后根据equals来进行比较的.所以你前面的3个对象是不一样的!hashcode的原理就是不同的对象,值就不一样!
                      CountIsable one=new CountIsable(date,accountNo,bankCode);
    CountIsable two=new CountIsable(date,accountNo,bankCode);
    CountIsable three=new CountIsable(date,accountNo,bankCode);
    这3个就是3个不同的对象!
    去翻一下jdk文档吧查一下Object的hashcode方法吧!
      

  5.   

    没添加进去当然找不到four,所以执行else下的语句,所以no object