ハッシュテーブルがあります。 values()メソッドは、私が挿入されている順序とは異なる順序で値を返します。挿入したのと同じ順序で値を取得できますか?LinkedHashmapの使用は代替ですが、同期されません。ハッシュテーブルの要素の順序を保持する方法
答えて
LinkedHashMap
を使用してください。 Map
インターフェース、 の
ハッシュテーブルとリンクされたリスト 実装予測可能な繰り返し順序を持ちます。この 実装は、 がすべてのエントリで実行されていることを維持していることを の
HashMap
とは異なります。 このリンクリストでは、 の順序付けが定義されています。通常は のキーで、 のマップ(、挿入順)にキーが挿入されています。 キーがの場合は、 の挿入順序に影響はありません。を地図に再挿入してください。 (m.containsKey(k)
をtrue
直前呼び出しに戻ってくるときにm.put(k, v)
が呼び出された場合 キーkがマップMに再挿入される。)
はCollections.synchronizedMap()
と組み合わせます。
ので、例えば:
Map<String, String> map = Collections.synchronizedMap(
new LinkedHashMap<String, String>());
明確にする:一度に1つ以上のトレッドがこの 'LinkedHashMap'にアクセスするのを見ていないのであれば、それをまだ同期することをお勧めしますか?または、それ自身の 'LinkedHashMap'は十分だと考えられますか? – blo0p3r
@ blo0p3r 'LinedHashMap'はそれだけで十分です。 –
ハッシュテーブルは本質的に順序付けられていないので、間違ったデータ構造を使用しています。あなたが使用している言語を指定していないので、代替を提案することはできませんが、順序付けられたキー/値セットが必要です。
私はJavaを使用しています。 JDK1.6 –
私はハッシュテーブルが並べ替えられていない理由は、保存と検索速度を助けることであることを確信しています。このため、順序を維持し、値を格納するためにハッシュテーブルを使用するだけで(高速検索用に)外部構造を使用することをお勧めします。
あなたはLinkedHashMap
をラップして同期するか、同期LinkedHashMap
を作成するためにCollections.synchronizedMap
ユーティリティを使用することができます可能性があり、次のいずれか
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
のJavaDocから:
複数のスレッドがリンクハッシュマップにアクセスした場合同時に少なくとも1つのスレッドがマップを構造的に変更する場合は、外部と同期させる必要があります。これは、通常、マップを自然にカプセル化するオブジェクトで同期することによって実現されます。そのようなオブジェクトが存在しない場合は、Collections.synchronizedMapメソッドを使用してマップを「ラップする」必要があります。誤って非同期でマップにアクセスするのを防ぐために、作成時に行うのが最適です。
ありがとう、それはパフォーマンスヒットでしょうか? –
パフォーマンスのオーバーヘッドは無視できます(文字どおりナノ秒)。 – Adamski
jdk1.6には、2つの型の順序マップEnumMapとLinkedHashMapしかありません。両方とも同期していません。あなただけのオーダーを覚えておく必要がある場合は、ソートされ、その後ConcurrentSkipListMapの
- 1. ハッシュテーブルのプロパティの順序
- 2. バインディングの順序バインディングの順序を保証する方法
- 3. doctype内の異なるカーディナリティを持つ要素の順序の順序
- 4. PythonのJSONダンプでディクショナリ要素の順序を維持する方法
- 5. Sqlite INSERTの順序を保持する方法
- 6. ggplot2 geom_bar ... data.frameの順序を保持する方法
- 7. JSONObjectでLinkedHashMapの順序を保持する方法は?
- 8. ロボットフレームワークでJsonオブジェクトの順序を保持する方法
- 9. ScalaでLinkedHashMap要素の順序を逆にする方法
- 10. ブートストラップとブレークポイントで要素の順序を変更する方法
- 11. 要素の順序を配列に格納する方法
- 12. オブジェクトへのLinq:GroupByは要素の順序を保持していますか?
- 13. equal_range C++要素の順序
- 14. サス子要素の順序?
- 15. XSLT Change要素の順序
- 16. 要素の順序を学習する
- 17. 要素の順序を変更する
- 18. unordered_set :: erase(pos)は要素の順序を保持していますか?
- 19. JSONリストの要素の順序は保持されていますか?
- 20. いくつかの要素の順序を維持する順列
- 21. Railsで関連するレコードの順序を保持する方法は?
- 22. 連想配列の要素を入力した順序と同じ順序で取得する方法
- 23. Rの2つのベクトルの要素の順序を比較する方法は?
- 24. SignalRサーバーからクライアントへのメッセージの順序を保持する方法
- 25. Spring Cloud Dataflow - メッセージの保持順序
- 26. BlockingCollectionの要素の順序<>
- 27. ブートストラップ "form-inline"クラスの要素の順序
- 28. HTMLは、右の要素の順序
- 29. strptime内の要素の順序
- 30. プロトタイプセル - 要素のアクセシビリティの順序
、使用している言語を使用したい場合は、
を使うのか? –
LinkedHashMapはJavaの一部です。 – jimyi
私はJavaを使用しています。 JDK1.6 –