【问题标题】:Duplicate value is put into hashmap将重复值放入 hashmap
【发布时间】:2014-10-05 19:42:24
【问题描述】:

谁能解释一下当重复值被放入 HashMap 时,幕后会发生什么?

put(k1,v1)
put(k2,v1)

它如何影响记忆?

【问题讨论】:

  • 这就像将相同的值存储在数组中的两个不同索引处。
  • 如果有帮助:地图不能有重复的键,重复值没有问题。换句话说A->1B->1 是可以的,但是在A->1A->2 的情况下,map 将只存储一对A->..,最近放置的一对。

标签: java memory hashmap


【解决方案1】:

绝对没有什么特别的事情发生。根据条目的键创建一个新条目并将其插入到底层结构的某个位置。 HashMap 条目的值与条目的放置位置或检索方式无关。

为了澄清,值将被复制到每个HashMapEntry

也许您对这个值是什么感到困惑。首先,区分对象、引用值和变量。我们一直在讨论的对对象的引用。阅读this 以了解其适用方式。

HashMap 不关心值。它不检查它们。它只关心键。所以当你输入相同的值时

map.put(k1,v1);
map.put(k2,v1);

HashMap 将构造两个 Entry 对象,它们都将保存(并因此复制)v1 的值,并将这些值存储在其底层结构中。

【讨论】:

  • 那你在说什么?当两个不同的键具有相同的值时。该值实际上在内存中被复制了吗?还是??
  • @rayman 是的,这就是我要说的。 将被复制到每个HashMapEntry中并存储在底层结构中。
  • @rayman: HashMapHashed 键和值之间的映射。值永远不会被散列,只有键是。唯一性只影响键。
  • 是的。但我在问记忆中会发生什么。值会重复吗?
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2012-01-13
  • 2013-01-12
  • 1970-01-01
  • 2019-09-18
  • 2013-10-31
  • 2015-01-23
相关资源
最近更新 更多