从java.util.Map获取值

Egi*_*gis 4 java hashmap map

我有Map<Date, String.我有两个相同的Date对象a, b.我将一个字符串值放到与key关联的地图上a.然后我尝试获取与键相关联的地图值a,b但只a返回我放置的值.是否有可能用b钥匙获得我的价值.我知道当键是简单的字符串时这是可能的.为什么这不适用于其他类型的对象?

public class Main {

public static void main(String[] args) {
    Map<Date, String> map = new HashMap<Date, String>();

    Date a = new Date(20131105);
    Date b = new Date(20131105);

    map.put(a, "sweet");

    System.out.println(map.get(a));
    System.out.println(map.get(b));
}

static class Date {
    private int ymd;

    public Date(int ymd) {
        this.ymd = ymd;
    }

    public int getYmd() {
        return ymd;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Date) {
            return ((Date) obj).ymd == ymd;
        }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

输出是:

sweet
null
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 5

由于您使用的HashMap是存储日期对象,因此必须覆盖该hashCode()方法,因为密钥对象使用其hashCode存储在数据结构中.

非常基本的hashCode()覆盖(仅用于说明):

@Override
public int hashCode(){
   return ymd;
}
Run Code Online (Sandbox Code Playgroud)

输出:


甜蜜

  • 刚刚注意到,人们需要停止这样做 (3认同)