我用下面的代码定义了一个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 个元素:
这是它包含的元素的列表。
{DiscreteOrderItemEntity@1c29ef3c=DiscreteOrderItemEntity@41949d95, DiscreteOrderItemEntity@2288b93c=DiscreteOrderItemEntity@2288b93c, BundleOrderItemEntity@1b500292=BundleOrderItemEntity@d0f29ce5, DiscreteOrderItemEntity@9203174a=DiscreteOrderItemEntity@9203174a}
可能是什么问题?
最佳答案
HashMap 处理冲突。
由于您的 HashMap
仅由 16 个桶组成,因此元素的哈希值必须减少到介于 0 和 15(例如 hash % 16
)。所以两个元素可能在同一个桶中(同一个HashMapNode
)。
您可以检查每个 HashMapNode
以找出哪个包含两个元素。
关于java - HashMap 包含 4 个元素,但在调试中仅显示 3 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534261/