JavaではどのようにHashMapを使うか、それともTreeMapを使うかを決めますか?
HashMap簡単なまとめ:
1、HashMapはチェーン配列(チェーンテーブルを格納する配列)であり、クエリ速度を実現することができ、かつ迅速にkeyに対応するvalueを取得することができる。
2、照会速度の影響要因は容量と負荷因子があり、容量が大きい負荷因子は小さいが、照会速度は速いが、無駄な空間がある。
3、配列のindex値は(keyキーワード、hashcodeはkeyのハッシュ値、len配列の大きさ)である:hashcode%lenの値は決定して、容量が大きい負荷係数が小さいとindexは同じ確率で、チェーン長が小さいと照会速度が速く、逆にindexの同じ確率の大きいチェーンテーブルは比較的に長い照会速度が遅い。
4、HashMapおよびそのサブクラスにとって、彼らはhashアルゴリズムを用いてセットの中の要素の記憶位置を決定し、HashMapを初期化すると、システムはcapacityという長さのEnttry配列を作成します。この配列には元素を格納できる位置を桶といいます。各桶にはその指定された索引があります。システムは、インデックスに従って、バケツに記憶されている要素に素早くアクセスすることができる。
5、いつでもHashMapの各バケツには一つの要素しか記憶されていません。Entryオブジェクトは次のEntryを指す参照変数を含むことができるので、HashMapのバケットの中に一つのEntryしかないかもしれませんが、このEntryは他のEntryを指すので、Entryチェーンを形成します。
6、上のソースコードによって、HashMapは下の階でkey_を発見しました。valueは一つの全体として処理します。この全体はEntryオブジェクトです。システムがHashMapのkey_を記憶すると決めた時に。valueは、Entryの中のvalueを全く考慮していません。keyのhash値によって、各Entryの格納位置を決定します。
紹介する
TreeMap<K,V>のKey値はjava.lang.Compparableを実現することを要求しています。だから、反復の時、TreeMapはデフォルトでKey値の昇順に並べられています。TreeMapの実現は、赤黒いツリー構造に基づいている。キーを自然の順番またはカスタムの順序で巡回するのに適しています。
HashMap<K,V>のKey値はハッシュhashCode()を実現し、分布はハッシュ、均一で、順序付けをサポートしない。データ構造は主にバレル(配列)、チェーンまたはマホガニーです。Mapに要素を挿入、削除、位置決めするのに適しています。
結論
順序付けの結果が必要なら、TreeMapを使うべきです。また、HashMapはより良い性能を持っていますので、順序付けが必要でない場合が多いです。HashMapを使います。
広く開拓する
1、HashMapとTreeMapの実現 hashMap:ハッシュ・テーブルに基づいて実施される。hashMapを使用して追加を要求するキークラスは、hashCode()とequals()を明確に定義し、hashCode()とequals()を書き換えることができます。HashMap空間の使用を最適化するために、初期容量と負荷係数を調整することができます。 hashMap():空きハッシュ映像 を構築する。 hashMap(Map m):ハッシュ映像を構築し、映像mのマッピングをすべて追加する 。 HashMap(int initial Capacity):特定の容量の空きを持つハッシュ映像 を構築する。 HashMap(int initial Capacity、floadFactor):特定の容量とローディング係数を有する空のハッシュ映像 を構築する。
TreeMap:赤黒いツリーに基づいて実現します。TreeMapは、ツリーが常に平衡状態にあるので、調整オプションがありません。 TreeMap():空き映像ツリーを構築する TreeMap(Map m):イメージツリーを構築し、イメージmのすべての要素を追加する TreeMap(Comprator c):イメージツリーを構築し、特定のコンパレータを使用してキーワードを並べ替える 。 TreeMap(SortedMap):イメージツリーを構築し、イメージツリー内のすべてのマッピングを追加し、順序映像sと同じコンパレータを使用して並べ替え を行う。
2、HashMapとTreeMapは非スレッドセキュリティです。
HashMapはAbstractMapの抽象類を継承し、TreeMapはSortedMapインターフェースから継承しています。
AbstractMap抽象クラス:equals()およびhashCode()方法をカバーして、2つの等しいマッピングが同じハッシュコードに戻ることを保証する。二つのマッピングサイズが同じで、同じキーを含み、各キーがこの二つのマッピングで対応する値が同じであれば、この二つのマッピングは等しいです。マッピングされたハッシュコードは、各要素がMap.Entryインターフェースの1つの実装であるマッピング要素のハッシュコードの総和である。したがって、マッピング内部順序にかかわらず、2つの等しいマッピングは同じハッシュコードを報告する。
SortedMapインターフェース:キーの順序を維持するために使用されます。SortedMapインターフェースは、2つのエンドポイントを含む映像のビュー(サブセット)のためのアクセス方法を提供する。並べ替えがマッピングに作用するキーの他に、SortedMapを処理するのはSortedSetと同じです。SortedMap実装クラスに追加する要素は、Comprableインターフェースを実現しなければなりません。そうでなければ、Compratorインターフェースの実装を提供する必要があります。TreeMapクラスは唯一の実装です。
3、TreeMapのデフォルトは昇順で並べられていますが、どのように彼を降順させますか?
コンパレータをカスタマイズして実現します。
コンパレータクラスを定義し、Compratorインターフェースを実現し、compare方法を書き換え、二つのパラメータがあります。この二つのパラメータはcompreToを呼び出して比較します。パラメータ文字列がこの文字列に等しい場合、0値を返します。 この文字列が文字列パラメータより小さい場合、0より小さい値を返します。 この文字列が文字列パラメータより大きい場合、0より大きい値を返します。
コンパレータをカスタマイズすると、戻る時に負の記号を追加して、比較の結果を逆の形で返します。コードは以下の通りです。
以上述べたように、JavaではどのようにHashMapを使うか、それともTreeMapを使うかを決めるかを紹介しました。皆さんに何かお聞きしたいことがあれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。
1、HashMapはチェーン配列(チェーンテーブルを格納する配列)であり、クエリ速度を実現することができ、かつ迅速にkeyに対応するvalueを取得することができる。
2、照会速度の影響要因は容量と負荷因子があり、容量が大きい負荷因子は小さいが、照会速度は速いが、無駄な空間がある。
3、配列のindex値は(keyキーワード、hashcodeはkeyのハッシュ値、len配列の大きさ)である:hashcode%lenの値は決定して、容量が大きい負荷係数が小さいとindexは同じ確率で、チェーン長が小さいと照会速度が速く、逆にindexの同じ確率の大きいチェーンテーブルは比較的に長い照会速度が遅い。
4、HashMapおよびそのサブクラスにとって、彼らはhashアルゴリズムを用いてセットの中の要素の記憶位置を決定し、HashMapを初期化すると、システムはcapacityという長さのEnttry配列を作成します。この配列には元素を格納できる位置を桶といいます。各桶にはその指定された索引があります。システムは、インデックスに従って、バケツに記憶されている要素に素早くアクセスすることができる。
5、いつでもHashMapの各バケツには一つの要素しか記憶されていません。Entryオブジェクトは次のEntryを指す参照変数を含むことができるので、HashMapのバケットの中に一つのEntryしかないかもしれませんが、このEntryは他のEntryを指すので、Entryチェーンを形成します。
6、上のソースコードによって、HashMapは下の階でkey_を発見しました。valueは一つの全体として処理します。この全体はEntryオブジェクトです。システムがHashMapのkey_を記憶すると決めた時に。valueは、Entryの中のvalueを全く考慮していません。keyのhash値によって、各Entryの格納位置を決定します。
紹介する
TreeMap<K,V>のKey値はjava.lang.Compparableを実現することを要求しています。だから、反復の時、TreeMapはデフォルトでKey値の昇順に並べられています。TreeMapの実現は、赤黒いツリー構造に基づいている。キーを自然の順番またはカスタムの順序で巡回するのに適しています。
HashMap<K,V>のKey値はハッシュhashCode()を実現し、分布はハッシュ、均一で、順序付けをサポートしない。データ構造は主にバレル(配列)、チェーンまたはマホガニーです。Mapに要素を挿入、削除、位置決めするのに適しています。
結論
順序付けの結果が必要なら、TreeMapを使うべきです。また、HashMapはより良い性能を持っていますので、順序付けが必要でない場合が多いです。HashMapを使います。
広く開拓する
1、HashMapとTreeMapの実現
TreeMap:赤黒いツリーに基づいて実現します。TreeMapは、ツリーが常に平衡状態にあるので、調整オプションがありません。
2、HashMapとTreeMapは非スレッドセキュリティです。
HashMapはAbstractMapの抽象類を継承し、TreeMapはSortedMapインターフェースから継承しています。
AbstractMap抽象クラス:equals()およびhashCode()方法をカバーして、2つの等しいマッピングが同じハッシュコードに戻ることを保証する。二つのマッピングサイズが同じで、同じキーを含み、各キーがこの二つのマッピングで対応する値が同じであれば、この二つのマッピングは等しいです。マッピングされたハッシュコードは、各要素がMap.Entryインターフェースの1つの実装であるマッピング要素のハッシュコードの総和である。したがって、マッピング内部順序にかかわらず、2つの等しいマッピングは同じハッシュコードを報告する。
SortedMapインターフェース:キーの順序を維持するために使用されます。SortedMapインターフェースは、2つのエンドポイントを含む映像のビュー(サブセット)のためのアクセス方法を提供する。並べ替えがマッピングに作用するキーの他に、SortedMapを処理するのはSortedSetと同じです。SortedMap実装クラスに追加する要素は、Comprableインターフェースを実現しなければなりません。そうでなければ、Compratorインターフェースの実装を提供する必要があります。TreeMapクラスは唯一の実装です。
3、TreeMapのデフォルトは昇順で並べられていますが、どのように彼を降順させますか?
コンパレータをカスタマイズして実現します。
コンパレータクラスを定義し、Compratorインターフェースを実現し、compare方法を書き換え、二つのパラメータがあります。この二つのパラメータはcompreToを呼び出して比較します。
static class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}
その後、MyCompratorクラスを通じてコンパレータの一例を初期化し、パラメータとしてTreeMapの構造方法に送る。
MyComparator comparator = new MyComparator();
Map<String,String> map = new TreeMap<String,String>(comparator);
このように、私達はカスタムコンパレータを使って降順を実現することができます。
public class MapTest {
public static void main(String[] args) {
//
MyComparator comparator = new MyComparator();
// map
Map<String,String> map = new TreeMap<String,String>(comparator);
//
map.put("a", "a");
map.put("b", "b");
map.put("f", "f");
map.put("d", "d");
map.put("c", "c");
map.put("g", "g");
//
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(map.get(key));
}
}
static class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}
}
締め括りをつける以上述べたように、JavaではどのようにHashMapを使うか、それともTreeMapを使うかを決めるかを紹介しました。皆さんに何かお聞きしたいことがあれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。