treemap java tutorial with java treemap examples
このJavaTreeMapチュートリアルでは、TreeMapクラス、反復、TreeMapの例、実装、Javaハッシュマップとツリーマップ、TreeMapAPIメソッドなどについて説明します。
TreeMapデータ構造は、キーと値のペアを自然にソートされた順序で格納するコレクションです。 TreeMapは、Javaコレクションフレームワークの一部であり、マップの実装です。
=> ここですべてのJavaチュートリアルを確認してください。
学習内容:
Java TreeMap
JavaでのTreeMapの主な特徴のいくつかは次のとおりです。
- Javaでツリーマップを実装するTreeMapクラスは、java.utilパッケージの一部です。 Mapインターフェースを実装します。
- TreeMapクラスはAbstractMapクラスを拡張し、NavigableMapおよびSortedMap(間接)インターフェースも実装します。
- TreeMapは同期されていません。
- デフォルトでは、TreeMap要素はデフォルトで昇順です。
- TreeMapは重複要素を許可しません。
- TreeMapはnull値を許可しますが、nullキーは許可しません。
次の図は、TreeMapクラスのクラス階層を示しています。
すでに述べたように、TreeMapクラスはNavigableMapインターフェースを実装し、それが次にSortedMapクラスを拡張します。 SortedMapは、マップインターフェイスをさらに継承します。
TreeMapクラスの宣言
TreeMapクラスの一般的な宣言を以下に示します。
public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, Serializable
ここで、K => TreeMapによって維持されるキーのタイプ
V =>マップされた値のタイプ
TreeMapの例
以下のプログラムは、TreeMapデータ構造の簡単な例を示しています。
import java.util.*; class Main{ public static void main(String args()){ //declare a TreeMap and initialize it TreeMap cities_map=new TreeMap (); cities_map.put(100,'Pune'); cities_map.put(102,'Jaipur'); cities_map.put(101,'Hyderabad'); cities_map.put(103,'Bangaluru'); //print the TreeMap contents using forEach System.out.println('Contents of TreeMap:'); System.out.print('{'); for(Map.Entry entries:cities_map.entrySet()){ System.out.print(entries.getKey()+' = '+entries.getValue() + ' '); } System.out.println('}'); } }
出力:
TreeMapの内容:
{100 =プネ101 =ハイデラバード102 =ジャイプール103 =バンガロール}
このプログラムでは、cities_mapという名前の単純なTreeMapオブジェクトを定義し、putメソッドを使用して、キーと値のペアに初期化しました。
次に、TreeMapクラスのentrySet()メソッドを使用し、forEachループを使用してこのセットを反復処理して、キーと値のペアを出力します。キーと値のペアを出力するには、それぞれgetKey()メソッドとgetValue()メソッドを使用します。
Windows10に最適なシステムユーティリティ
TreeMapAPIメソッドとコンストラクター
このセクションでは、TreeMapクラスによって提供されるさまざまなコンストラクターとメソッドについて説明します。
コンストラクター
コンストラクタープロトタイプ | 説明 | |
---|---|---|
下降マップ | NavigableMapdescendingMap() | 指定されたキーと値のペアを逆の順序で返します。 |
TreeMap() | 自然な順序で空のTreeMapを作成するためのデフォルトのコンストラクタ。 | |
TreeMap(コンパレータコンパレータ) | 指定されたコンパレータに基づいてソートされた空のTreeMapを構築します。 | |
TreeMap(マップm) | TreeMapを構築し、指定されたマップの要素mで初期化します。注文は自然です。 | |
TreeMap(SortedMap m) | TreeMapを構築し、SortedMapエントリで初期化します。順序はsortedMapと同じです。 |
メソッド
方法 | メソッドプロトタイプ | 説明 |
---|---|---|
天井エントリー | Map.EntryceilingEntry(Kキー) | キーが指定されたキー以上になるような最小のキーと値のペアを返します。キーがない場合はnull |
天井キー | Kシーリングキー(Kキー) | 指定されたキーよりも小さいキーと大きいキーを返します。キーがない場合はnullを返します。 |
晴れ | ボイドクリア() | ツリーマップからすべてのキーと値のペアを削除します。 |
クローン | オブジェクトクローン() | TreeMapインスタンスの浅いコピーを作成します。 |
コンパレータ | コンパレータコンパレータ() | キーの配置に使用されるコンパレータを返します。順序付けが自然な場合はnull |
下降キーセット | NavigableSetdescendingKeySet() | TreeMapキーのNavigableSetビューを逆の順序で返します。 |
firstEntry | Map.Entry firstEntry() | 最小のキーと値のペアを返します。 |
floorEntry | Map.Entry floorEntry(Kキー) | 指定されたキー以下の最大のキーを返します。そのようなキーがない場合はnull |
forEach | void forEach(BiConsumerアクション) | 指定されたアクションは、TreeMapのエントリごとに実行されます。 |
headMap | SortedMap headMap(K toKey) | 返されるキーがtoKeyよりも厳密に小さくなるように、キーと値のペアを返すために使用されます |
headMap | NavigableMap headMap(K toKey、ブール値を含む) | toKey未満、または包括的である場合は等しいキーのキーと値のペアを返します。 |
highEntry | Map.EntryhigherEntry(Kキー) | 最小のキーまたはnullを返します。返されるキーは、指定されたキーよりも厳密に大きくなります。 |
higherKey | KhigherKey(Kキー) | ツリーマップ内の指定されたキーにマッピングが存在する場合、キーを返します。 |
keySet | キーセットを設定する() | TreeMap内のキーのセットコレクションを返します。 |
lastEntry | Map.Entry lastEntry() | キーが最大のキーになるように、キーと値のペアを返します。キーが存在しない場合はnullを返します。 |
lowerEntry | Map.Entry lowerEntry(Kキー) | キーが最大で、指定されたキーよりも厳密に小さくなるようなキーと値のペアを返します。キーが存在しない場合はnullを返します。 |
lowerKey | K lowerKey(Kキー) | 最大のキーまたはnullを返します。返されるキーは、指定されたキーよりも厳密に少なくなります。 |
navigableKeySet | NavigableSet navigableKeySet() | TreeMapのキーの「NavigableSet」を返します。 |
pollFirstEntry | Map.Entry pollFirstEntry() | 最小のキーのキーと値のペアを削除して返します。 |
pollLastEntry | Map.Entry pollLastEntry() | 最大のキーのキーと値のペアを削除して返します。 |
置く | Vプット(Kキー、V値) | 指定されたキーと値をTreeMapに追加します。 |
putAll | void putAll(マップマップ) | 指定されたマップのすべてのキーと値のペアがTreeMapにコピーされます。 |
交換 | V置換(Kキー、V値) | 指定されたキーの値を指定された値に置き換えるか、変更します。 |
交換 | ブール置換(Kキー、V oldValue、V newValue) | 指定されたキーのoldValueをnewValueに置き換えます。 |
replaceAll | void replaceAll(BiFunction関数) | 指定された関数を呼び出し、すべてのエントリを関数の結果に置き換えます。 |
subMap | NavigableMapサブマップ(K fromKey、boolean fromInclusive、K toKey、boolean toInclusive) | 「fromKey」から「toKey」までのキーとキーのペアを返します。 |
SortedMap | SortedMapサブマップ(K fromKey、K toKey) | fromKey(包括的)からtoKey(排他的)の範囲のキーと値のペアを返します。 |
tailMap | SortedMap tailMap(K fromKey) | キーがfromKey以上になるようなキーと値のペアを返します。 |
tailMap | NavigableMap tailMap(K fromKey、ブール値を含む) | fromKey(包括的= true)以上のキーのキーと値のペアを返します。 |
containsKey | ブールcontainsKey(オブジェクトキー) | ツリーマップに指定されたキーのマッピングがあるかどうかを確認します。はいの場合はtrueを返します。 |
containsValue | ブールcontainsValue(オブジェクト値) | 指定された値にマップされたキーがあるかどうかを確認します。 trueの場合はyesを返します。 |
firstKey | K firstKey() | ソートされたマップの最も低いキーまたは最初のキーを返します |
取得する | V get(オブジェクトキー) | 指定されたキーにマップされた値を取得します |
lastKey | K lastKey() | ソートされたマップの最後のキーまたは最も高いキーを返します。 |
削除する | V削除(オブジェクトキー) | TreeMap内の指定されたキーのキーと値のペアを削除します |
entrySet | セットする | 指定されたTreeMapのセットを返します。 |
サイズ | intサイズ() | TreeMapのサイズまたはキーと値のペアの総数を返します。 |
値 | コレクション値() | TreeMapの値のコレクションを返します。 |
TreeMapを反復処理
TreeMapは、キーと値のペアで構成されています。 TreeMapクラスは、マップ内のキーと値のペアを返すメソッド「entrySet」を提供します。 forEachループを使用してこれらのエントリを反復処理し、getKey()メソッドとgetValue()メソッドをそれぞれ使用してキーと値を表示できます。
これは、以下のJavaプログラムに示されています。
import java.util.Map; import java.util.TreeMap; class Main { public static void main(String() arg){ //declare and initialize TreeMap Map colorsTree = new TreeMap(); colorsTree.put('R', 'Red'); colorsTree.put('G', 'Green'); colorsTree.put('B', 'Blue'); colorsTree.put('M', 'Magenta'); System.out.println('The contents of TreeMap:'); // retrieve set of map entries using entrySet method for (Map.Entry Map_entry : colorsTree.entrySet()) //print key-value pairs using getKey() and getValue() System.out.println( '(' + Map_entry.getKey() + '=>' + Map_entry.getValue() + ')'); } }
出力:
TreeMapの内容:
(B =>青)
(G =>緑)
(M =>マゼンタ)
(R =>赤)
JavaでのTreeMapの実装
次のJavaプログラムは、上記のTreeMapクラスのメインメソッドを示しています。
import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Main { public static void main(String() args) { //declare a TreeMap Object and initialize it with values TreeMap map = new TreeMap<>(); for(int i=1;i<=10;i++) { map.put(i, (i*i)+''); } System.out.println('Original Map:' + map); //lowerEntry, higherEntry Entry entry = map.lowerEntry(4); System.out.println('Closest Lower Entry than 4:'+entry); entry = map.higherEntry(4); System.out.println('Closest Higher Entry than 4:'+entry); System.out.println('Closest Lower key than 4 :'+map.lowerKey(4)); entry = map.floorEntry(6); System.out.println('Closest floor entry than 6: '+entry); entry = map.ceilingEntry(6); System.out.println('Closest ceiling Entry than 6 :'+entry); entry = map.firstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.lastEntry(); System.out.println('TreeMap Last Entry:'+entry); Map reversedMap = map.descendingMap(); System.out.println('Reversed TreeMap: '+reversedMap); //pollFirstEntry, pollLastEntry entry = map.pollFirstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.pollLastEntry(); System.out.println('TreeMap Last Entry:'+entry); //subMap Map subMap = map.subMap(2, true, 6, true); System.out.println('Submap from 2 to 6: '+subMap); //headMap subMap = map.headMap(5, true); System.out.println('HeadMap: '+subMap); //tailMap subMap = map.tailMap(5, true); System.out.println('TailMap: '+subMap); } }
出力:
元のマップ:{1 = 1、2 = 4、3 = 9、4 = 16、5 = 25、6 = 36、7 = 49、8 = 64、9 = 81、10 = 100}
4:3 = 9よりも最も低いエントリ
4:5 = 25よりも最も高いエントリ
最も近い4:3より低いキー
6よりも近いフロアエントリー:6 = 36
6:6 = 36よりも最も近い天井のエントリ
TreeMapの最初のエントリ:1 = 1
TreeMap最終エントリ:10 = 100
逆ツリーマップ:{10 = 100、9 = 81、8 = 64、7 = 49、6 = 36、5 = 25、4 = 16、3 = 9、2 = 4、1 = 1}
TreeMapの最初のエントリ:1 = 1
TreeMap最終エントリ:10 = 100
2から6までのサブマップ:{2 = 4、3 = 9、4 = 16、5 = 25、6 = 36}
HeadMap:{2 = 4、3 = 9、4 = 16、5 = 25}
TailMap:{5 = 25、6 = 36、7 = 49、8 = 64、9 = 81}
TreeMapを値で並べ替える
デフォルトでは、TreeMapは自然な順序に従ってキーに基づいてソートされます。ただし、TreeMapを値に従って並べ替える場合は、コンパレータを使用して並べ替えを定義する必要があります。
以下のJavaプログラムは、TreeMapを値でソートします。
import java.util.*; class Main { //Method for sorting the TreeMap based on values public static > Map sortTreeMap(final Map map) { //define a comaprator to sort TreeMap on values Comparator valueComparator = new Comparator() { public int compare(K k1, K k2) { int compare = map.get(k1).compareTo(map.get(k2)); if (compare == 0) return 1; else return compare; } }; //use the comparator to sort the TreeMap and return sortedTreeMap Map sortedTreeMap = new TreeMap(valueComparator); sortedTreeMap.putAll(map); return sortedTreeMap; } public static void main(String args()) { //define and initialize the TreeMap TreeMap treemap = new TreeMap(); treemap.put('R', 'Red'); treemap.put('G', 'Green'); treemap.put('B', 'Blue'); treemap.put('C', 'Cyan'); treemap.put('M', 'Magenta'); // call method sortTreeMap to sort the TreeMap Map sortedTreeMap = sortTreeMap(treemap); // Retrieve set of the entries on the sorted map Set set = sortedTreeMap.entrySet(); System.out.println('The sorted TreeMap based on Values:'); // Now define iterator on this set Iterator i = set.iterator(); // Print TreeMap elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } } }
出力:
値に基づいてソートされたTreeMap:
B:青
C:シアン
G:緑
M:マゼンタ
R:赤
Javaハッシュマップとツリーマップ
HashMapとTreeMapの主な違いをいくつか見てみましょう。
次の表に、これらの違いを示します。
HashMap | TreeMap |
---|---|
HashMapはTreeMapよりもはるかに高速です。 | TreeMapは遅い |
Mapインターフェースを実装します。 | NavigableMapインターフェースを実装します。 |
ハッシュ実装手法を使用 | 実装に赤黒木を使用する |
要素を含む順序を維持しません | ツリーマップのキーは、自然な順序に従ってすでに順序付けられています |
1つのnullキーと多くのnull値を許可します | null値のみを許可しますが、キーをnullにすることはできません |
基本的な操作を実行し、一定の時間で配置および取得します。 | ログ(n)時間を取って、putおよびget操作を実行します |
HashMapの機能は制限されています。 | TreeMapクラスは、データ構造の操作に役立つ多くの追加機能を提供します。 |
比較にはequals()メソッドを使用します。 | 比較にcompareTo()メソッドを使用します。 |
よくある質問
Q#1)JavaのTreeMapとは何ですか?
回答: JavaのTreeMapは、すでにソートされているキーと値のペアのコレクションです。実装の目的で赤黒木を使用します。 Java TreeMapは、Mapインターフェースとは別にNavigableMapインターフェースを実装し、AbstractMapクラスも拡張します。
トレントファイルの使い方
Q#2) JavaでTreeMapを使用するのはなぜですか?
回答: TreeMapは、JavaでMapおよびNavigableMapインターフェースとAbstractMapクラスを実装するために使用されます。 TreeMapキーは自然な順序に従って並べ替えられるため、このデータ構造を使用して、ディレクトリ構造やツリー階層などを格納できます。
Q#3) HashMapとTreeMapのどちらが良いですか?
回答: HashMapはTreeMapよりも優れています。 HashMapは基本的な操作を実行するのに常に一定の時間を要しますが、TreeMapはこれらの操作を実行するのにlog(n)時間を要します。より大きなデータオブジェクトが含まれる場合、HashMapはTreeMapと比較して高速に実行されます。
Q#4) TreeMapはソートされていますか?
回答: はい、TreeMapのキーエントリは自然な順序に従って並べ替えられます。 TreeMapクラスを使用すると、カスタムコンパレータを使用して、値に基づいてTreeMapを並べ替えることもできます。
Q#5) TreeMapはスレッドセーフですか?
回答: いいえ、TreeMapはスレッドセーフなコレクションではありません。
結論
このチュートリアルでは、JavaでのTreeMapについて詳しく説明しました。 TreeMapは、マップインターフェイスを実装するキーと値のペアのコレクションです。また、NavigableMapインターフェイスを実装します。 TreeMapの要素は一意であり、重複は許可されていません。
TreeMapのコンストラクターとメソッドを見ました。また、TreeMapプログラムを実装し、TreeMapクラスの主要なメソッドを示しました。次に、HashMapとTreeMapの違いについて説明しました。
=> すべてのJavaトレーニングシリーズを見るには、ここにアクセスしてください。