あ タプル は、さまざまなタイプのオブジェクトを保持できるデータ構造です。これらのオブジェクトは互いにつながっているわけではありませんが、集合的に考えると意味を持ちます。このセクションでは、次のことについて説明します タプルとは何ですか 、 特徴、サイズ、 そして オペレーション タプルの。また、 Java でのタプルの実装 。
タプルとは何ですか?
一般に、 タプル オブジェクトの順序付けされたコレクションです。タプルでは、データは別のバイト配列にオブジェクトとして保存されます。角括弧 [] で囲まれたカンマ区切りの値が含まれます。タプルは 不変、 リストのデータ構造とは異なります。タプルは複数のタプルを保持できます。匿名オブジェクトとみなすこともできます。
タプルの特徴
タプルには次のような特徴があります。
- それは タイプセーフ、反復可能、不変、 そして シリアル化可能 。
- それは、 toString()、equals()、 そして ハッシュコード()
- また、 匹敵します (タプルはComparableを実装します)
タプルの例
次の例を考えてみましょう。
['Sophia', 'Female', 22, 'Marketing Manager']
上記のタプルは、 カルテット タプルがあるため、 四 要素(オブジェクト)。各オブジェクトが異なるタイプであることがわかります。しかし、それを集合的に考えると、それは特定の意味を持ちます。上記のタプルは、名前、性別、年齢、役職などの従業員のデータを表します。
タプルの他の例をいくつか見てみましょう。
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Javaのタプル
Java では、タプルは各要素をオブジェクトとして扱う汎用データ構造であり、これらのオブジェクトは別のバイト配列に格納されます。言い換えれば、タプルは 順序付けられました さまざまなタイプのオブジェクトのコレクション。
タプルの機能は List および Array データ構造を使用して実装できますが、これらのデータ構造は設計上、異なるタイプのデータ型を保持しません。したがって、次のことは明らかです。 異質な 標準のデータ構造(リスト/配列)を使用したタプルは Java では使用できません。必要だったので タプル 保持要件を満たすデータ構造 同種の データ構造。
ご了承ください タプル データ構造は Java プログラミングには存在しません 、デフォルトでは。ただし、という名前のサードパーティ ライブラリを使用してタプル データ構造を実装できます。 ジャバタプル 。
実装に進む前に、まず、 javatuples.jar ファイル。そして、このファイルをプロジェクトのパスに追加します。
次の依存関係を使用することもできます。 pom.xml Java でタプル データ構造を実装するためのファイル。
org.javatuples javatuples 1.2
タプルを実装して、簡単な Java タプル プログラムを作成してみましょう。
Javatuple ライブラリ
の ジャバタプル ライブラリには、タプルのサイズに対応するタプル クラスがあります。タプルのサイズは異なる場合があります。タプルは最大値を保持できます。 10 要素。各タプルの実装は異なります。クラス階層は以下の通りです。
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Javaタプルクラス
の タプル に属するすべてのタプル クラスの抽象基本クラスです。 org.javatuples パッケージ。タプル クラスのすべてのメソッドは public かつ Final です。次の表は、タプル クラスのメソッドをまとめたものです。 Iterable および Serializable インターフェイスを実装します。
Excelで最初の文字を削除する
方法 | 構文 | 説明 |
---|---|---|
を含む() | public Final boolean contains(java.lang.Object value) | タプルに特定の要素があるかどうかをチェックします。 |
containsAll() | public Final boolean containsAll(java.util.Collection コレクション) | このタプルに指定されたコレクション (リスト/配列) のすべての要素が含まれている場合は true を返します。 |
等しい() | publicfinal booleanequals(java.lang.Object obj) | をオーバーライドします 等しい() オブジェクトクラスのメソッド。 |
getSize() | パブリック抽象 int getSize() | タプルのサイズを返します。 |
getValue() | パブリック最終java.lang.Object getValue(int pos) | タプル内の特定の位置の値を取得します。このメソッドはオブジェクトを返さなければならないため、これを使用すると、 getValueX() 方法。 |
ハッシュコード() | public Final int hashCode() | 文字列のハッシュ コードを返します。をオーバーライドします。 ハッシュコード() オブジェクトクラスのメソッド。 |
の指標() | publicfinalintindexOf(java.lang.Object値) | この文字列内で、指定された部分文字列が最初に出現するインデックスを返します。 |
イテレータ() | public Final java.util.Iterator iterator() | このタプル内の要素に対する反復子を適切な順序で返します。 |
lastIndexOf() | public Final int lastIndexOf(java.lang.Object 値) | この文字列内で、指定された部分文字列が最後に出現したインデックスを返します。 |
toArray() | パブリック最終 java.lang.Object[] toArray() | タプルを配列に変換します。 |
toString() | パブリックファイナルjava.lang.String toString() | オブジェクトの文字列表現を返します。 Object クラスの toString() メソッドをオーバーライドします。 |
toList() | パブリック最終java.util.List toList() | タプルをリストに変換します。 |
直接の既知のサブクラス
タプルのサイズ | タプルクラス名 | 例 |
---|---|---|
1つの要素 | ユニット | ユニット |
2つの要素 | ペア | ペア |
3つの要素 | トリプレット | トリプレット |
4つの要素 | カルテット | カルテット |
五行 | クインテット | クインテット |
六つの要素 | 六重奏曲 | 六重奏曲 |
7つの要素 | セブン | セブン |
8つの要素 | オクテット | オクテット |
9つの要素 | エニード | エニード |
十の要素 | 十年 | 十年 |
上記のクラスの他に、javatuples ライブラリによって提供される追加のクラスが 2 つあります。 キー値 そして ラベル値 。 これら 2 つのクラスは次のように似ています。 ペア クラスを作成し、同じ機能を提供しますが、セマンティクスが異なります。
各タプル クラスは次の 3 つのインターフェイスを実装します。
- 反復可能
- 匹敵します
- シリアル化可能
タプルの実装
Java でのタプルの実装は非常に簡単です。サイズに応じたタプルクラスのインスタンスを作成する必要があります。
TupleExample.java
import org.javatuples.Quartet; public class TupleExample { public static void main(String args[]) { //create a pair tuple from the constructor Quartet quartet = new Quartet('Sophia', 'Female', 22, 'Marketing Manager'); //print the tuples objects System.out.println('The details of the employee are: ' + quartet); } }
出力:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
タプルの操作
タプルに対して次の操作を実行できます。
- タプルの作成
- 値の取得
- 設定値
- 要素の追加
- タプルを反復処理する
- タプルをリストに変換
- タプルでの検索
タプルの作成
タプルを作成するには 3 つの方法があります。
- with() メソッドを使用する
- コンストラクターを使用する場合
- コレクションを使用する
タプルを作成する上記の 3 つの方法を見てみましょう。
with() メソッドを使用する
javatuples ライブラリは、 と() 指定された値を持つタプルを作成するメソッド。このメソッドは以下に属します。 org.javatuples.Pair パッケージ。オブジェクトを値でインスタンス化するために使用されます。
構文:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
例:
Pair pair = Pair.with('iPhone 12', 112000.00);
上記のペア クラス オブジェクトは、2 つの値を持つタプルを作成します。同じための Java プログラムを作成しましょう。
CreateTupleExample1.java
import org.javatuples.Pair; class CreateTupleExample1 { public static void main(String args[]) { Pair pair = Pair.with(9086651, 'Dell Laptop'); System.out.println(pair); } }
出力:
[9086651, Dell Laptop]
コンストラクターを使用する場合
この場合、要件に従ってクラスのコンストラクターを作成します。
構文:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
例:
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
コンストラクターを使用してタプルを作成する Java プログラムを作成してみましょう。
CreateTupleExample2.java
import org.javatuples.Quintet; class CreateTupleExample1 { public static void main(String args[]) { Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4); System.out.println(quintet); } }
出力:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
コレクションを使用する
javatuples ライブラリを使用すると、コレクションからタプルを作成できます。 fromCollection() 方法。また、を使用して配列からタプルを作成することもできます。 fromArray() 方法。コレクション/配列はタプルと同じ型と値を持つ必要があることに注意してください。
コレクション/配列はタプルと同じ型である必要があり、コレクション/配列内の値の数はタプル クラスと一致する必要があります。
構文:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
例:
Octet p1 = Octet.fromCollection(list); Sextet p2 = Sextet.fromArray(arr);
CreateTupleExample3.java
import java.util.ArrayList; import java.util.List; import org.javatuples.Sextet; import org.javatuples.Octet; class CreateTupleExample3 { public static void main(String args[]) { //creating a list List list = new ArrayList(); //adding elements to the list list.add('C'); list.add('C++'); list.add('Java'); list.add('Python'); list.add('Scala'); list.add('Ruby'); list.add('PHP'); list.add('COBOL'); //creating an object of Pair class and passing the list Octet p1 = Octet.fromCollection(list); //creating an Array String[] arr = {'One', 'Two', 'Three', 'Four', 'Five', 'Six'}; //creating an object of the Pair class and invoking the fromArray() method Sextet p2 = Sextet.fromArray(arr); //prints the tuple created using list System.out.println(p1); //prints the tuple using Array System.out.println(p2); } }
出力:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
値の取得
javatuples ライブラリを使用すると、指定されたインデックスにあるタプルから値をフェッチすることもできます。 getValueX() 方法。ここで、X はオブジェクトのインデックス値を表します。インデックス作成は 0 から始まります。
例:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
GetValueExample.java
import org.javatuples.Pair; class GetTupleValue { public static void main(String args[]) { //creating a tuple Pair pair = Pair.with(12, 'Andrew'); //getting values at index 1 System.out.println(pair.getValue1()); } }
出力:
[Andrew]
設定値
上で説明したように、タプルは不変です。したがって、作成後に変更することはできません。この問題を解決するために、javatuples ライブラリは setValueX() 方法。ここで、X は特定の値を設定するインデックス値です。このメソッドは、指定されたインデックスに新しく追加された値を含むタプルのコピーを作成し、同じタプルを返します。
例:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
SetValueExample.java
import org.javatuples.Pair; class SetTupleValue { public static void main(String args[]) { //creating a tuple Pair p1 = Pair.with(67, 69); //setting tuple value at index 1 Pair p2 = p1.setAt1(68); System.out.println(p2); } }
出力:
[67, 68]
値を追加する
タプルに値を追加するには 2 つの方法があります。
- タプルの最後に
- 特定のインデックスで
タプルの最後に
javatuples ライブラリは、 追加() タプルにオブジェクトを追加するメソッド。タプルの末尾にオブジェクトを追加し、要素数に合わせて新しいタプルを返します。
2 つの要素を持つタプルがあり、そのタプルに別の要素を追加したいとします。このような場合、Pair タプルは 3 番目の要素をサポートしません。したがって、要素をペア タプルに追加すると、要素はトリプレット タプルに変換されます。例を見てみましょう。
AddElementInTuple.java
import org.javatuples.Pair; import org.javatuples.Triplet; public class AddElementInTuple { public static void main(String args[]) { Pair pair = Pair.with('Jack', 46); Triplet triplet = pair.add('Finance Professional'); System.out.println(pair); System.out.println(triplet); } }
出力:
[Jack, 46] [Jack, 46, Finance Professional]
1 つのタプルを別のタプルに追加することもできます。新しく生成されるタプル内の要素の数が増加します。したがって、追加後に存在する要素の数に基づいてタプルのタイプを返します。
AddTuplesExample.java
import org.javatuples.Quartet; import org.javatuples.Septet; import org.javatuples.Triplet; public class AddTuplesExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('Mango', 'Grapes', 'Papaya'); //creating an object of quartet tuple and adding an elements at index-1 in triplet tuple Quartet quartet = triplet.addAt1('Banana'); //adding quartet and triplet tuple we get a septet tuple i.e. 3+4=7 //the following statement can be written as Septet septet = quartet.add(triplet); Septet septet = quartet.add(triplet); System.out.println(triplet); System.out.println(quartet); System.out.println(septet); } }
出力:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
指定されたインデックスで
デフォルトでは、新しい要素はタプルの最後に追加されます。ただし、次のメソッドを使用して、指定されたインデックスに要素を追加できます。 addX() 方法。
AddAtIndexExample.java
import org.javatuples.Quartet; import org.javatuples.Triplet; public class AddAtIndexExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('MCA', 'M.Sc.', 'MBBS'); //creating an object of quartet tuple and adding an element at index-2 in triplet tuple Quartet quartet = triplet.addAt2('M.Tech'); System.out.println(triplet); System.out.println(quartet); } }
出力:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
要素の検索
タプル内に存在する要素を検索することもできます。 javatuples ライブラリを検索するために、 を含む() Tuple クラスのメソッド。ブール値を返します 真実 要素が存在する場合、それ以外の場合は戻ります 間違い 。例を見てみましょう。
SearchingElementExample.java
import org.javatuples.Pair; class SearchingElementExample { public static void main(String args[]) { Pair pair = Pair.with(34, 'Jack'); //returns true because Jack is present in tuple boolean res1 = pair.contains('Jack'); //returns false because Andrew is not present in tuple boolean res2 = pair.contains('Andrew'); System.out.println(res1); System.out.println(res2); } }
出力:
true false
タプルをコレクションまたは配列に変換する
各タプル クラスには、それぞれ List と Array を返す asList() メソッドと toArray() メソッドがあります。例を見てみましょう。
TupleToCollection.java
import java.util.Arrays; import java.util.List; import org.javatuples.Quartet; public class TupleToCollection { public static void main(String args[]) { //Convert to list Quartet quartet = Quartet.with('Dog', 12,'German Shepherd', 23.89); //converts to list List list = quartet.toList(); //prints list System.out.println(list); //Converts to array Object[] quartletArr = quartet.toArray(); //prints array System.out.println(Arrays.toString(quartletArr)); } }
出力:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
タプルには異種の型が含まれる可能性があるため、結果の型は次のようになります。 リスト または 物体[] それに応じて。
タプルの反復
すべてのタプル クラスは以下を実装します。 反復可能 インターフェース。したがって、コレクションや配列と同じ方法でタプルを反復できます。
IterateTuple.java
import org.javatuples.Quartet; class IterateTuple { public static void main(String args[]) { //creating a quartet tuple Quartet quartet = Quartet.with('Dell', 5600.00, 34, 'Digital Solutions'); //iterate over tuple for(Object obj : quartet) { //prints elements System.out.println(obj); } } }
出力:
Dell 5600.0 34 Digital Solutions
タプル vs.リスト/配列
タプル | リスト |
---|---|
これは、カンマで区切られた値のセットであり、 括弧 。 | これは、カンマで区切られた値のセットであり、 角括弧 。 |
括弧は オプション 。 | 角括弧は 必須 。 |
それは 不変 。 | それは 可変 。 |
必要です 少ない メモリ。 | より多くのメモリが必要です。 |
それは持っています 少ない ファクトリーメソッド。 | それは持っています もっと ファクトリーメソッド。 |
それは 修理済み 長さ。 | それは持っています 変数 長さ。 |
保管します 異質な データ。 | 保管します 同種の データ。 |
に適しています 大きい データ量。 | に適しています。 小さい データ量。 |
に保管できます。 リスト 。 | 中に収納できます タプル 。 |
それは もっと早く リストとの比較。 | それは もっとゆっくり タプルとの比較。 |
それは次のように表されます t1 = (1、2、3、4、5) | それは次のように表されます l1 = [1、2、3、4、5] |