1. ホーム
  2. java

[解決済み] HashMapのtoString関数はなぜ異なる順序で自分自身を印刷するのですか?

2022-03-04 13:15:14

質問

私は非常にシンプルなコードを持っていて、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を使っています。

どのように解決するのですか?

オラクルのドキュメントによると

<ブロッククオート

HashMapクラスはHashtableとほぼ同じですが、非同期であることとNULLを許容していることが異なります。このクラスはマップの順序を保証しません。特に、時間が経っても順序が一定であることは保証しません。

参照 ハッシュマップ JavaDocsを参照してください。