ジャワ ハッシュマップ そして ツリーマップ どちらも Java Collections フレームワークのクラスです。 Java Map 実装は通常、バケット化されたハッシュ テーブルとして機能します。バケットが大きくなりすぎると、バケットは次のノードに変換されます。 ツリーノード 、それぞれの構造は次のものと同様です。 java.util.ツリーマップ 。
ハッシュマップ
HashMap の実装 マップ、複製可能 そして シリアル化可能 インターフェース。伸びる 抽象地図 クラス。に属します java.util パッケージ。
パブリック Java とプライベート Java
- HashMap にはキーに基づく値が含まれます。
- 単一の null キーと複数の null 値を持つことができます。
- HashMap は反復中に順序を維持しません。
- ユニークな要素が含まれています。
- ハッシュの原理に基づいて動作します。
ツリーマップ
TreeMap クラスの拡張 抽象地図 クラスと実装 ナビゲート可能なマップ 、 クローン可能 、 そして シリアル化可能 インターフェース。 TreeMap はその一例です。 ソートマップ 。これは、キーの順序がソートされることを意味する、赤黒ツリーによって実装されます。
- TreeMap には、キーに基づく値も含まれます。
- TreeMap はキーによってソートされます。
- ユニークな要素が含まれています。
- null キーを含めることはできませんが、複数の null 値を含めることはできません。
- キーは昇順に並んでいます。
- オブジェクトをツリー構造に格納します。
HashMap と TreeMap の類似点
- どちらのクラスも延長します 抽象地図 クラス。
- Map は、次の情報を格納するオブジェクトです。 キーと値 ペア。キーと値のペアでは、各キーは一意ですが、その値は異なる場合があります。 重複 。
- どちらのクラスも、からのマッピングを表します。 鍵 に 価値観 。
- どちらのマップもそうではありません 同期した 。
- 地図の使用 置く() マップに要素を追加するメソッド。
- イテレータは ConcurrentModificationException マップが何らかの方法で変更された場合。
HashMap と TreeMap の主な違いは次のとおりです。
ハッシュマップ は反復順序を保持しませんが、 ツリーマップ を使用して順序を保存します 比較対象() 方法または コンパレータ TreeMap のコンストラクターで設定されます。
次の表では、HashMap と TreeMap の違いについて説明します。
基礎 | ハッシュマップ | ツリーマップ |
---|---|---|
意味 | ジャワ ハッシュマップ ハッシュテーブルベースの Map インターフェイスの実装です。 | ジャワ ツリーマップ は、Map インターフェイスのツリー構造ベースの実装です。 |
インターフェースの実装 | HashMap の実装 マップ、複製可能 、 そして シリアル化可能 インターフェース。 | TreeMap の実装 NavigableMap、複製可能 、 そして シリアル化可能 インターフェース。 |
Null キー/値 | HashMap では、 シングル nullキーと 複数 NULL 値。 | ツリーマップでは許可されていません ヌル キーが存在する可能性があります 複数 NULL 値。 |
同種/異種 | HashMap はキーの並べ替えを実行しないため、異種の要素を許可します。 | TreeMap では、ソートにより同種の値をキーとして使用できます。 |
パフォーマンス | ハッシュマップは もっと早く TreeMap よりも、get() や put() などの基本操作に対して O(1) の定数時間パフォーマンスが提供されるためです。 | ツリーマップは 遅い HashMap と比較すると、add()、remove()、contains() などのほとんどの操作で O(log(n)) のパフォーマンスが得られるためです。 |
データ構造 | HashMap クラスは ハッシュ表 。 | TreeMap は内部的に 赤、黒 ツリー。これは自己平衡型の二分探索ツリーです。 |
比較方法 | それは使用しています 等しい() の方法 物体 キーを比較するクラス。 Map クラスの equals() メソッドはこれをオーバーライドします。 | それは、 比較対象() キーを比較するメソッド。 |
機能性 | HashMap クラスには次のような基本的な関数のみが含まれています get()、put()、KeySet() 、など。 | TreeMap クラスには次のような関数が含まれているため、機能が豊富です。 tailMap()、firstKey()、lastKey()、pollFirstEntry()、pollLastEntry() 。 |
要素の順序 | HashMap は順序を維持しません。 | 要素は次のようにソートされます。 自然な秩序 (上昇)。 |
用途 | HashMap は、ソートされた順序でキーと値のペアを必要としない場合に使用する必要があります。 | TreeMap は、ソートされた (昇順) 順序でキーと値のペアが必要な場合に使用する必要があります。 |
ハッシュマップとツリーマップの例
次の例では、HashMap の要素がランダムな順序であるのに対し、TreeMap の要素は昇順に配置されていることがわかります。
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
出力: