java - HashMap 中的条目被完全不同的键覆盖?

标签 java

我有一个用于存储一些基本字符串值的 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/

相关文章:

java - 优先级队列不维护队列属性

在 ServletContext 资源 [/WEB-INF/spring-servlet.xml] : 中定义的名称为 'dataSource' 的 Java 无效 bean 定义

java - 如何在java中提取MS SQL SERVER 2008 R2的TIME(7)字段的值?

java - 访问 Velocity 模板中子类的方法

java - 使用 PowerMock 添加测试后 Spring Web 应用程序无法启动

java - Postgresql 9.3 - JDBC 连接错误

java - 返回mysql的thread_id

java - JPA with Hibernate - 如果实现复合键则缺少列

java - JBoss5 CLIENT-CERT 身份验证获取 HTTP 状态 401 - 无法使用提供的凭据进行身份验证错误

java - 基本安卓 : How to display string of user input?