java - HashMap 包含 4 个元素,但在调试中仅显示 3 个

标签 java hashmap

我用下面的代码定义了一个HashMap:

final Map<OrderItemEntity, OrderItemEntity> savedOrderItems = new HashMap<OrderItemEntity, OrderItemEntity>();
final ListIterator<DiscreteOrderItemEntity> li = ((BundleOrderItemEntity) oi).getDiscreteOrderItems().listIterator();

while (li.hasNext()) {
    final DiscreteOrderItemEntity doi = li.next();
    final DiscreteOrderItemEntity savedDoi = (DiscreteOrderItemEntity) orderItemService.saveOrderItem(doi);
    savedOrderItems.put(doi, savedDoi);
    li.remove();
}

((BundleOrderItemEntity) oi).getDiscreteOrderItems().addAll(doisToAdd);
final BundleOrderItemEntity savedBoi = (BundleOrderItemEntity) orderItemService.saveOrderItem(oi);
savedOrderItems.put(oi, savedBoi);

我将 4 个项目放入 HashMap。当我调试时,即使 size 是 4,它也只显示 3 个元素:

debugging session

这是它包含的元素的列表。

{DiscreteOrderItemEntity@1c29ef3c=DiscreteOrderItemEntity@41949d95, DiscreteOrderItemEntity@2288b93c=DiscreteOrderItemEntity@2288b93c, BundleOrderItemEntity@1b500292=BundleOrderItemEntity@d0f29ce5, DiscreteOrderItemEntity@9203174a=DiscreteOrderItemEntity@9203174a}

可能是什么问题?

最佳答案

HashMap 处理冲突

由于您的 HashMap 仅由 16 个桶组成,因此元素的哈希值必须减少到介于 015(例如 hash % 16)。所以两个元素可能在同一个桶中(同一个HashMapNode)。

您可以检查每个 HashMapNode 以找出哪个包含两个元素。

关于java - HashMap 包含 4 个元素,但在调试中仅显示 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534261/

相关文章:

java - 如何在 Eclipse 的多个选项卡中打开多个控制台?

java - 递归 JSON 输入导致 SyntaxError : Unexpected end of JSON input at JSON. 解析

java - 如何检查条件语句的 HashMap 的大小

java - Hazelcast Delta 更新

java - 通过共享菜单从其他应用程序接收文本

java - 执行外部程序

Java - 添加一个对象而不引用原始对象

java - 使用键复合键进行高效的 HashMap 检索(由 2 个枚举构建)

java - 我如何在Android上使用Soap从Web服务发送和接收Hashmap

java - 如何在Java中将句子分成单词,然后将其分为两组?