为什么HashMap的toString函数以不同的顺序打印自己?

2022-09-04 05:25:34

我有一段非常简单的代码,我只是试图在Map中玩一些不同类型的对象。

//There's a bit of spanish, sorry about that
//just think 'persona1' as an object with
//a string and an int
Map mapa = new HashMap();
mapa.put('c', 12850);
mapa.put(38.6, 386540);
mapa.put("Andrés", 238761);
mapa.put(14, "Valor de 14");
mapa.put("p1", persona1);
mapa.put("Andrea", 34500);

System.out.println(mapa.toString());

然后我期望从控制台中如下所示:

{c=12850, 38.6=386540, Andrés=238761, 14=Valor de 14, p1={nombre: Andres Perea, edad: 10}, Andrea=34500}

但对我来说,我以不同的顺序获得了相同的数据:

{38.6=386540, Andrés=238761, c=12850, p1={nombre: Andres Perea, edad: 10}, Andrea=34500, 14=Valor de 14}

无论我是否尝试其他类型的对象,即使只是字符串或数字类型,它总是做同样的事情,它会产生一个不同的无意义顺序。

有人可以给我一个提示,为什么会发生这种情况吗?或者可能是我错过的东西太明显了?

我使用的是Java 1.7和Eclipse Juno。


答案 1

根据甲骨文的文档

HashMap 类大致等效于 Hashtable,只是它是非同步的并且允许空值。此类不保证映射的顺序;特别是,它不保证订单将随着时间的推移而保持不变。

请参阅 HashMap JavaDocs。


答案 2

有3个类在java中实现映射接口。1. 哈希地图:Id不保证任何订单。2.链接的哈希地图:它将按插入顺序存储它们。3.树状图:它将按升序存储。(ASCII 值)

因此,根据您的要求,您可以使用Linked HashMap而不是 HashMap.so 而不是编写

Map mapa = new HashMap();

创建链接哈希映射的对象

Map mapa = new LinkedHashMap();

点击下面的链接了解更多信息。

http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html