Java HashMap和Object键

时间:2016-04-12 18:05:46

标签: java collections hashmap

实施例

LinkedHashMap<Long, String> myHashMap = new LinkedHashMap<>();
myHashMap.put(new Long(1), "A Value");

问题

  1. 密钥是引用还是副本?
  2. 如果我写String aValue = myHashMap.get(new Long(1));,我会回复"A Value"吗?或者我只是查询了一个不同的对象(参考),因此我会收到错误?

2 个答案:

答案 0 :(得分:5)

  1. 映射存储对作为参数传递的对象的引用的副本。没有对象的副本。
  2. 是的,你会得到&#34; A Value&#34;回来,如记录所述。 Map将其键与equals()进行比较,而不是==(IdentityHashMap除外)。你可以很容易地测试一下,BTW。

答案 1 :(得分:3)

  1. 密钥是对同一实例的引用。
  2. 您将获得"A Value",因为Long已被覆盖

    • equals()return value == obj.longValue()),
    • hashCode()return Long.hashCode(value))。