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

Sau*_*mar 5 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);
Run Code Online (Sandbox Code Playgroud)

我把4件物品放入HashMap.当我调试时,即使size它是4,它只显示3个元素:

调试会话

这是它包含的元素列表.

{DiscreteOrderItemEntity@1c29ef3c=DiscreteOrderItemEntity@41949d95, DiscreteOrderItemEntity@2288b93c=DiscreteOrderItemEntity@2288b93c, BundleOrderItemEntity@1b500292=BundleOrderItemEntity@d0f29ce5, DiscreteOrderItemEntity@9203174a=DiscreteOrderItemEntity@9203174a}
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

enr*_*cis 14

Hashmaps处理冲突.

由于您HashMap只由16个桶组成,因此元素的散列必须减少到跨越015之间的数字(例如hash % 16).所以两个元素可能在同一个桶中(相同HashMapNode).

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