我有一个用于存储一些基本字符串值的 Java HashMap:
Map<String, String> map = new HashMap<String, String>();
map.put("Id", task.getStorageId());
map.put("Name", task.getName());
map.put("Description", task.getDescription());
在一种用法下,Id
条目被Description
条目覆盖,每次都不会失败。我在调试器中看到了它 - Id
插入正常,Name
插入正常,然后当插入 Descroption
时,它会覆盖 Id
条目。在应用程序的另一部分使用完全相同的代码和 key ,它可以正常工作。完全糊涂了。这里发生了什么?
编辑
也许我应该提到(虽然它看起来不相关),这是在 Android 上发生的,而不是在 JVM 上发生的。这可能是问题所在吗?我也很难相信,但是代码块就像提供的代码片段一样简单。我将尝试捆绑一个演示它的 Android 应用程序并发布在某个地方。
最佳答案
很可能您没有看到的条目就在那里,查看表的 modCount,您应该会看到正确数量的条目。这意味着发生了哈希冲突。基本上 2 个键被散列到表中的同一个桶中。如果您查看具有原始 key 的存储桶,它有一个下一个字段,它是指向您认为丢失的另一个条目的指针。
关于java - HashMap 中的条目被完全不同的键覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457824/