为什么我的HashMap将元素放在第6位而不是下一个空位?

时间:2015-05-21 16:53:55

标签: java hashmap

我在方法中运行以下代码,但在返回时键和值<“dataInicio”>,<“orange”>在地图的第六位而不是像它应该的位置一。怎么可能这样做?

我正在创建此地图以将参数作为参数发送到Jasper报告,并将dataInicio置于位置6,然后将dataFim置于位置1,将listaParametros置于位置3。这太疯狂了。

以下是代码:

 final Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("SUBREPORT_DIR", "apple");
        parameters.put("dataInicio", "orange");
        parameters.put("dataFim", "melon");
        parameters.put("listaParametros", "banana");
        return parameters;

这是表达式视图的eclipse打印屏幕:enter image description here

3 个答案:

答案 0 :(得分:2)

散列映射不是列表,索引是根据您存储的数据使用散列函数计算的。实际上,有时不同的数据会获得相同的索引,当发生这种情况时,散列映射有一种机制来分配不同的其中一个的索引。

答案 1 :(得分:2)

这是HashMap的重点。事实上,它是“哈希”这个词的含义。在许多情况下,元素应该放在表中基本上随机的位置 - 哈希码修改表的大小。

这是为什么HashMap的文档说明“此类不保证地图顺序的原因的一部分;特别是,它不能保证订单在一段时间内保持不变。”< / p>

答案 2 :(得分:1)

因为这就是HashMap的工作方式 - 根据哈希码将密钥插入到桶中,所以不会保留插入顺序。您可能想要尝试String, Object对列表或LinkedHashMap(不会更改有关内部存储的任何内容,但至少能够按插入顺序返回值)。< / p>