我在方法中运行以下代码,但在返回时键和值<“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打印屏幕:
答案 0 :(得分:2)
散列映射不是列表,索引是根据您存储的数据使用散列函数计算的。实际上,有时不同的数据会获得相同的索引,当发生这种情况时,散列映射有一种机制来分配不同的其中一个的索引。
答案 1 :(得分:2)
这是HashMap
的重点。事实上,它是“哈希”这个词的含义。在许多情况下,元素应该放在表中基本上随机的位置 - 哈希码修改表的大小。
这是为什么HashMap
的文档说明“此类不保证地图顺序的原因的一部分;特别是,它不能保证订单在一段时间内保持不变。”< / p>
答案 2 :(得分:1)
因为这就是HashMap
的工作方式 - 根据哈希码将密钥插入到桶中,所以不会保留插入顺序。您可能想要尝试String, Object
对列表或LinkedHashMap
(不会更改有关内部存储的任何内容,但至少能够按插入顺序返回值)。< / p>