いくつかのデータをJavaハッシュテーブルに挿入しました。ハッシュテーブルからデータを読み取った場合、挿入した順序と同じ順序で返されません。順序付けられたデータを取得するにはどうすればよいですか。ハッシュテーブル?
次のコードを使用して、ハッシュテーブルから値を取得します。
// Get a set of the entries
Set set = hsUpdateValues.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
System.out.print(
"Key : " + me.getKey()
+ ", Value: " + me.getValue()
);
}
順序を維持するマップが必要な場合は、 LinkedHashMap
を使用する必要があります。
予測可能な反復順序を使用した、マップインターフェイスのハッシュテーブルとリンクリストの実装。この実装は、すべてのエントリを介して実行される二重リンクリストを維持するという点でHashMapとは異なります。このリンクリストは、反復順序を定義します。これは通常、キーがマップに挿入された順序(挿入順序)です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。 (
m.put(k, v)
が呼び出される直前にtrueを返すときにm.containsKey(k)
が呼び出されると、キーk
がマップm
に再挿入されます。)この実装は、
HashMap
に関連するコストの増加を招くことなく、Hashtable
(およびTreeMap
)によって提供される不特定の一般的に混沌とした順序からクライアントを保護します。
これは通常、HashMap
ではなくHashtable
と比較されることに注意してください-Hashtable
と同等の順序を保持する方法はわかりません。いずれにせよ、後者は最近では通常使用されていません(ArrayList
が通常Vector
よりも優先して使用されるのと同じように)。
key-sortedorderではなくinsertionorderが必要だと思います。後者が必要な場合は、 TreeMap
を使用してください。
Hashtable
は並べ替えることができませんが、並べ替えられたデータを取得する方法を尋ねました。これは、HashTable
から抽出されたキーのリストを並べ替え、その順序で値を取得する方法です。何かのようなもの:
List<'your_type'> tmp = Collections.list('your_hashtable'.keys());
Collections.sort(tmp);
Iterator<'your_type'> it = tmp.iterator();
while(it.hasNext()){
'your_type' element =it.next();
//here you can get ordered things: 'your_hashtable'.get(element);
}
良くなるよ。
Hashtable
には予測可能な反復順序がなく、並べ替えることができません。予測可能な反復順序のみが必要な場合は、 LinkedHashMap
を使用する必要があります。 Map
を並べ替えることができるようにする場合は、 TreeMap
を使用する必要があります。
Hashtable
は、1998年にJava 1.2コレクションに置き換えられたレガシーコレクションです。Vector
およびEnumeration
とともに回避することをお勧めします。 。
Hashtable
の代わりに、可能な場合はHashMap
を使用してください。必要に応じて、Collections.synchronizedMap(map)
を使用して同期を追加できます。
Vector
の代わりに、可能な場合はArrayList
を使用してください。必要に応じて、Collections.synchronizedList(map)
を使用して同期を追加できます。
Enumeration
の代わりに、Iterator
またはfor-each
ループを使用できます。
TreeMapを使用して並べ替えます。
Map<String, String> yourMap = new HashMap<String, String>();
yourMap.put("1", "one");
yourMap.put("2", "two");
yourMap.put("3", "three");
Map<String, String> sortedMap = new TreeMap<String, String>(yourMap);
私はこの前の質問で マップの並べ替えと順序付き検索に関する詳細な回答 を書きました:
ハッシュテーブルからデータを読み取った場合、挿入した順序と同じ順序ではありません。
あなたの質問は意味がありません。ハッシュテーブルには「順序」がなく、順序付けられていません(編集:一部の実装には順序がありますが、ハッシュテーブルでは一般的ではありません)。
エントリはどのような順序であると思いますか?
要素を特定の順序で格納する場合は、リスト(Java.util.Listのサブクラスなど)を使用する必要があります。
ところで、コードサンプルにはハッシュテーブルすら含まれていません。