:からこの翻訳のHashMap、TreeMapのとのLinkedHashMapの違い
何BETWEEN -differenceにありHashMap
、LinkedHashMap
およびTreeMap
Javaで? でJava HashMap
、LinkedHashMap
とTreeMap
の違いは何ですか? 任意の-differenceが持つ三のASすべての出力にIをしないでくださいkeySet
とvalues
。 すべての3つを持っているので、私は、出力の違いを見ないkeySet
とvalues
。 それは何ですかHashtable
?S は何Hashtable
?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
#1階
参考:https://stackoom.com/question/C7lJ/HashMap-LinkedHashMapとTreeMapの違い
ハウス#2
私自身の経験からわずかいくつかのより多くの入力 :私は一つ一つを使用するときのマップで、 私自身の経験のマップから複数の入力を取得し、私はそれぞれのマップを使用する場合:
- HashMapの-ほとんどの便利な-Aベストパフォーマンス(FAST)実装を探している。 HashMapの-最適なパフォーマンス(高速)を達成するために探しているときに最も有用。
- TreeMapの(SortedMapインタフェース) - 。私がある、またはI DEFINEキーを順番にで反復処理することできるの並び替えてるときAの特定のほとんどの便利な憂慮 私は特定の順序で私の鍵の世話をすることができたときに定義された-のTreeMap(SortedMapのインターフェイス)ときの順序や反復、最も有用。
- AのLinkedHashMap - 。からの順序は保証のコンバインの利点のTreeMapなしには、TreeMapの維持コストの増加 AのLinkedHashMapを-のTreeMap TreeMapの結合の利点を維持するためのコストが増大することなく、順序を保証します。 (これは、ASほとんどのHashMapでFAST AS IS)。 (それは、HashMapのとほぼ同じ速度です)。 具体的には、のLinkedHashMapでもAグレートでオーバーライドすることにより、Aキャッシュオブジェクトを作成するための出発点提供
removeEldestEntry()
,.方法 特に、のLinkedHashMapも覆うことでremoveEldestEntry()
Cacheオブジェクトを作成するための良い出発点法を提供します。 これは、Cacheオブジェクトを作成することができますあなたが定義することをいくつかの基準を使用してデータを期限切れにすることができます。 これは、あなたがCacheオブジェクトが原因あなたが定義する一定の条件にデータを利用することができます作成することができます。
ハウス#3
保証について行うものではありません。絶対にありませんイテレーション注文。でのHashMap HashMapのは絶対に保証繰り返し順序という。 それは(となります)も変更することができ 、新たな要素が追加されたときに完全に。 新たな要素を追加する場合、それも(と)完全に変更することができます。 TreeMapのウィル彼らのcompareTo()メソッド(またはAN外部から供給されるコンパレータ)。によると、キーの「自然順序付け」に反復よる のcompareTo(外部またはコンパレータを提供)ザ・TreeMapの()メソッド「自然順序付け」キー反復します。 また、それはSortedMapインタフェース、実装このソート順に依存する方法を含んでいる。 また、それはこの方法は、このソート順序に依存SortedMapインタフェースを実装します。 LinkedHashMapはどの順序で反復されますマップに入れたエントリ 反復のLinkedHashMapは、マップへのエントリの順序に従います
どのようにパフォーマンスの変化..見て どのようにパフォーマンスの変化を見るため...
ソートの実装であるツリーマップマップ。 ツリーの順序は、図の実装です。 プットの複雑さは、取得し containsKeyオペレーションは、自然の秩序にO(ログn)は 、自然のために、複雑プット、取得しcontainsKeyオペレーションはO(ログn)は、
#4階
私は視覚的なプレゼンテーションを好む: 私は視覚的なプレゼンテーションを好みます:
╔══════════════╦═════════════════════╦═══════════════════╦═════════════════════╗
║ Property ║ HashMap ║ TreeMap ║ LinkedHashMap ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ Iteration ║ no guarantee order ║ sorted according ║ ║
║ Order ║ will remain constant║ to the natural ║ insertion-order ║
║ ║ over time ║ ordering ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ Get/put ║ ║ ║ ║
║ remove ║ O(1) ║ O(log(n)) ║ O(1) ║
║ containsKey ║ ║ ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ ║ ║ NavigableMap ║ ║
║ Interfaces ║ Map ║ Map ║ Map ║
║ ║ ║ SortedMap ║ ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ ║ ║ ║ ║
║ Null ║ allowed ║ only values ║ allowed ║
║ values/keys ║ ║ ║ ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║ ║ Fail-fast behavior of an iterator cannot be guaranteed ║
║ Fail-fast ║ impossible to make any hard guarantees in the presence of ║
║ behavior ║ unsynchronized concurrent modification ║
╠══════════════╬═════════════════════╦═══════════════════╦═════════════════════╣
║ ║ ║ ║ ║
║Implementation║ buckets ║ Red-Black Tree ║ double-linked ║
║ ║ ║ ║ buckets ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║ Is ║ ║
║ synchronized ║ implementation is not synchronized ║
╚══════════════╩═══════════════════════════════════════════════════════════════╝
ハウス#5
各クラスである場合階層図ザのクラスは、以下の(参照つビガー。) (のクラス階層の各クラスを表示図の位置の下に大きい方)。 実装TreeMapのSortedMap
とNavigableMap
しばらくはHashMap
しない。 TreeMapの用具SortedMap
及びません。NavigableMap
HashMap
HashTable
廃止と対応しているのConcurrentHashMap
クラスを使用しなければならない。 HashTable
廃止されたが、対応する使用する必要があるConcurrentHashMap
クラスを。
ハウス#6
これらは、同じインタフェースの異なる実装されている 。 これらは、同じインタフェースの異なる実装されています。 各実装は、いくつかの利点と、いくつかの欠点有するその逆(高速インサート、遅いサーチ)または副である。 各実装は、いくつかの利点と、いくつかの欠点(急速挿入、遅い検索)、およびその逆を有します。
ののJavaDocで詳細を見てAT のTreeMap、HashMapの、のLinkedHashMap。 詳細については、を参照してくださいTreeMapを、HashMapの、のLinkedHashMapのJavadocのを。