treeset java tutorial with programming examples
このチュートリアルでは、TreeSetクラス、実装、反復、TreeSetとHashSet、JavaTreeSetの例などについてすべて説明します。
JavaのTreeSetは、Setインターフェイス(より具体的にはSortedSet)を実装します。 TreeSetは、データを格納するために内部的にTreeMapを使用します。デフォルトでは、TreeSetのオブジェクトまたは要素は、自然順に従って昇順で保存されます。
JavaでTreeSetを実装するTreeSetクラスは、「NavigableSet」インターフェイスを実装し、AbstractSetクラスも継承します。
=> ここでJavaトレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください。
学習内容:
JavaのTreeSet
TreeSet要素は、特定のコンストラクタープロトタイプを使用してTreeSetオブジェクトを作成するときに、カスタマイズされたコンパレーターを提供することによって明示的に順序付けすることもできることに注意してください。
以下に、TreeSetの重要な特性の一部を示します。
- TreeSetクラスは、SortedSetインターフェイスを実装します。重複する要素は許可されません。
- TreeSetクラスは同期されていません。
- TreeSetは挿入順序を保持しませんが、TreeSetの要素は自然な順序に従って並べ替えられます。
- TreeSetは、TreeSetオブジェクトの作成時にカスタムコンパレータを使用して注文できます。
- TreeSetは通常、自然にソートされた大量の情報を格納するために使用されます。これにより、簡単かつ迅速にアクセスできます。
TreeSetクラス宣言
Javaは、TreeSetデータ構造の機能を含む「TreeSet」と呼ばれるクラスを提供します。 TreeSetクラスは、java.utilパッケージの一部です。
TreeSetクラスをJavaプログラムに含めるには、次のようにimportステートメントを使用する必要があります。
import java.util.TreeSet;
または
import java.util.*;
TreeSetクラスの一般的な宣言は次のとおりです。
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
クラス宣言からわかるように、TreeSetクラスはAbstractSetを拡張し、NavigableSet、Cloneable、およびSerializableインターフェイスを実装します。
TreeSetクラスのクラス階層を以下に示します。
内部実装
TreeSetがNavigableSetインターフェースを実装し、SortedSetクラスを拡張することはわかっています。
内部的には、TreeSetコンストラクターは次のように定義されています。
public TreeSet() { this(new TreeMap()); }
上記のTreeSetのコンストラクター定義に見られるように、TreeMapオブジェクトが呼び出されます。したがって、内部的には、TreeSetに実装されるのはTreeMapオブジェクトです。したがって、TreeSetに要素を追加するときに、キーがTreeMapに追加され、デフォルトでキーが並べ替えられます。
によると TreeSetに関するOracleのドキュメント 、
「TreeSetは、TreeMapに基づくNavigableSetの実装です。」
JavaTreeSetの例
次のJavaプログラムは、TreeSetを示す簡単な例を示しています。このプログラムでは、単純なColorTreeSetを定義しました。それに要素を追加してから表示します。要素は自然な順序に従って表示されることに注意してください。
import java.util.*; class Main{ public static void main(String args()){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
出力:
TreeSetの内容:
ブルーグリーンレッドイエロー
TreeSetを反復処理する
TreeSetの個々の要素にアクセスするには、TreeSetを反復処理する必要があります。つまり、TreeSetをトラバースする必要があります。
これを行うには、TreeSetのイテレーターを宣言してから、このイテレーターを使用して各要素にアクセスします。このために、TreeSetの次の要素を返すイテレータのnext()メソッドを使用します。
次のJavaプログラムは、Iteratorを使用してTreeSetを反復処理する方法を示しています。
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String() args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
出力:
TreeSet:(5、10、15、20、25)
イテレータを使用したTreeSet:5、10、15、20、25、
SQLクエリは答えのある質問を練習します
JavaのTreeSetコンパレータ
デフォルトでは、TreeSetは自然に順序付けられています。新しいコンパレータクラスを定義することにより、カスタマイズされた順序でTreeSetを並べ替えることもできます。このコンパレータクラスでは、「compare」メソッドをオーバーライドして、TreeSetの要素を並べ替える必要があります。次に、このコンパレータオブジェクトはTreeSetコンストラクタに渡されます。
次のJavaプログラムは、Comparatorを使用してTreeSetをソートする方法を示しています。
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String() args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
出力:
TreeSet:(プネ、インドール、ハイデラバード、バンガロール)
上記のプログラムは、Comparatorクラスを実装して、指定されたTreeSetをアルファベット順に逆の順序で並べ替えます。
推奨読書= >> Javaコンパレータインターフェイス
TreeSet API /メソッドとコンストラクター
このセクションでは、TreeSetクラスのAPIについて説明します。ここでは、TreeSetクラスによって提供されるコンストラクターとメソッドについて説明します。
TreeSetクラスは、TreeSetオブジェクトを構築するためのオーバーロードされたコンストラクターを提供します。
これらのコンストラクターを次のように表にまとめました。
コンストラクター
コンストラクタープロトタイプ | 説明 | |
---|---|---|
含まれています | boolean contains(Object o) | TreeSetに指定された要素が含まれているかどうかを確認します。存在する場合はtrue。 |
TreeSet() | 新しい空のTreeSetオブジェクトを作成するためのデフォルトのコンストラクタ。 | |
TreeSet(コレクションc) | 指定されたコレクションcの要素を含む新しいTreeSetオブジェクトを作成し、自然な順序に従って並べ替えます。 | |
TreeSet (コンパレータコンパレータ) | 空で、指定されたコンパレータに従ってソートされる新しいTreeSetオブジェクトを構築します。 | |
TreeSet(SortedSet s) | 指定されたsortedSetの要素を含む新しいTreeSetオブジェクトを作成します。 |
メソッド
次に、TreeSetクラスによって提供されるさまざまなメソッドを表にまとめましょう。
方法 | メソッドプロトタイプ | 説明 |
---|---|---|
追加 | ブール加算(E e) | まだ存在しない場合は、指定された要素をTreeSetに追加します。 |
全て追加する | boolean addAll(コレクションc) | 指定されたコレクションcのすべての要素をセットに追加します。 |
天井 | E天井(E e) | e以上の要素(最小要素)を返します。要素が存在しない場合はnull。 |
晴れ | ボイドクリア() | TreeSetからすべての要素を削除します。 |
クローン | オブジェクトクローン() | TreeSetオブジェクトの浅いコピーを返します。 |
コンパレータ | コンパレータコンパレータ() | TreeSetのコンパレータを返します。自然な順序が使用されている場合は、nullを返します。 |
降順Iterator | イテレータdescendingIterator() | TreeSet内の要素の降順のイテレータを返します。 |
下降セット | NavigableSetdescendingSet() | TreeSet内の要素のビューを逆の順序で返します。 |
最初 | Eファースト() | TreeSetの最初または最下位の要素を返します。 |
床 | Eフロア(E e) | TreeSet内の指定された要素e以下の要素を返します。そのような要素がない場合はnullを返します。 |
ヘッドセット | SortedSet headSet(E toElement) | 指定されたtoElementよりも厳密に小さい要素のセットを返します |
NavigableSet headSet(E toElement、ブール値を含む) | toElementに等しい(包括的= trueの場合)またはそれよりも小さい要素のセットを返します。 | |
より高い | Eより高い(E e) | 指定された要素よりも厳密に大きいこのセット内の最小要素を返します。そのような要素がない場合はnullを返します。 |
isEmpty | ブールisEmpty() | TreeSetが空かどうかを確認します。空の場合はtrueを返します。 |
イテレータ | イテレータイテレータ() | TreeSetのイテレータ(昇順)を返します。 |
最終 | E最後() | TreeSetの最上位または最後の要素を返します。 |
下 | E下(E e) | TreeSetで指定された要素eよりも厳密に小さい要素(最大要素)を返します。 |
pollFirst | E pollFirst() | セット内の最初の(最も低い)要素を削除して返します。セットが空の場合はnull。 |
pollLast | E pollLast() | セット内の最後の(最大の)要素を削除して返します。空に設定するとnullになります。 |
削除する | ブール値の削除(オブジェクトo) | 指定された要素をセットから削除します。 |
サイズ | intサイズ() | TreeSetに存在する要素のサイズまたは数を返します。 |
サブセット | NavigableSetサブセット(E fromElement、boolean fromInclusive、E toElement、boolean toInclusive) | fromElementからtoElementまでの範囲の要素のビューを返します。 |
SortedSetサブセット(E fromElement、E toElement) | fromElement(包括的)からtoElement(排他的)までの範囲のビュー要素を返します。 | |
tailSet | SortedSet tailSet(E fromElement) | 指定されたfromElement以上の要素を含むビューを返します。 |
NavigableSet tailSet(E fromElement、ブール値を含む) | fromElement以上の要素のビューを返します(包括的である場合)。 |
Java8のTreeSet
TreeSetの場合、Java8バージョンに大きな変更はないことに注意してください。すべてのメソッドとコンストラクターは、Java8以降のバージョンで機能します。
JavaでのTreeSetの実装
次のJavaプログラムは、上記のTreeSetメソッドのほとんどを実装しています。
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String() args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
出力:
ツリーセットの内容:10 15 25 30 35
天井(25):25
フロア(25):25
TreeSet contains(15):true
ツリーセットサイズ:5
TreeSet最初の要素:10
TreeSet最後の要素:35
TreeSetから要素30が削除されました
削除後のTreeSet():10 15 25 35
削除後のTreeSetサイズ():4
ヘッドセット:(10、15、25)
クリア後のツリーセットサイズ():0
上記のプログラムでは、TreeSetオブジェクトを定義し、「add」メソッドを使用してそれに要素を追加します。次に、ArrayListを定義します。次に、「addAll」メソッドを使用してArrayListの要素をTreeSetに追加します。後で、イテレータ、天井、床、最初、最後、含む、サイズ、isEmptyなどのさまざまなTreeSetメソッドを示します。
TreeSetとHashSet
TreeSetとHashSetの違いをいくつか確認してみましょう。
TreeSet | HashSet |
---|---|
要素は自然な順序に従って順序付けられます。 | 要素は順序付けられていません。 |
挿入、削除、検索などの操作にO(log N)時間がかかるため、TreeSetよりも遅くなります。 | 挿入、削除、検索などの基本的な操作に一定の時間がかかるため、TreeSetよりも高速です。 |
nullオブジェクトは許可されません。 | nullオブジェクトを許可します。 |
compareTo()メソッドを使用して、2つのオブジェクトを比較します。 | compare()メソッドとequals()メソッドを使用して、2つのオブジェクトを比較します。 |
NavigableTreeMapを使用して内部的に実装されています。 | HashMapを使用して内部的に実装されています。 |
さまざまな操作を実行できる豊富な機能のAPIを備えています。 | HashSetの機能APIはかなり制限されています。 |
よくある質問
Q#1)TreeSetとは何ですか?
回答: TreeSetは、重複する値を許可しないSortedSetの実装です。 TreeSetの要素は、デフォルトで昇順で並べ替えられます。
Q#2) JavaでTreeSetに要素を追加するにはどうすればよいですか?
回答: TreeSetクラスは、特定の要素をTreeSetに追加するために使用されるaddメソッドを提供します。また、「addAll」メソッドも提供します。このメソッドは、他のコレクションを引数として受け入れ、このコレクションのすべての要素をTreeSetに追加します。
Q#3) TreeSetはスレッドセーフですか?
回答: いいえ。TreeSetはスレッドセーフではありません。したがって、マルチスレッド環境でTreeSetを操作する方法に注意する必要があります。
Q#4) TreeSetに重複を含めることはできますか?
回答: いいえ。TreeSetは重複を許可していません。
Q#5)TreeSetはJavaでnullを許可しますか?
回答: はい。 TreeSetにnull要素を含めることができます。
結論
これで、TreeSetに関するチュートリアルは完了です。 TreeSetは、重複を許可しないがnull値を許可するSortedSet実装です。 TreeSetの要素は、デフォルトで自然順に従って昇順で並べ替えられます。
TreeSetクラスの基本と、その宣言およびさまざまなコンストラクターとメソッドを見てきました。
以降のチュートリアルでは、残りのJavaコレクションクラスについて説明します。
=> ここで簡単なJavaトレーニングシリーズに注意してください。