JavaでPairクラスを実装する
この投稿では、Javaで独自のPairクラスを実装する方法について説明します。
ペアは、2つのオブジェクトのタプルを格納するためのコンテナーです。 JDKは、Pairクラスの実装を提供していません。これは、Pairクラスが指定された値間の関係を指定していないことが原因である可能性があります。例を見てみましょう std::pair
C++では、 first
と second
フィールドは何でもかまいません。 C++はデータが何であるかを示しません pair
クラスストア。 Javaでは、 Map.Entry
キーと値のペアを表す意味のある名前を持つ優れた例です。
ペアに格納されたデータ間に意味のある関係はありませんが、プログラマーはJavaのこの機能を見逃すことがよくあります。説明したように、回避策があります ここ、詳細には、ギャップを埋めるために。しかし、Javaで独自のPairクラスを実装して、スタイルに合わせてカスタマイズできるのは素晴らしいことではないでしょうか。
ええと、Pairクラスを書くことは実際にはJavaで非常に簡単です。以下は、JavaでのPairクラスの簡単なカスタム実装です。
- 2つのパブリックフィールド–
first
とsecond
、C++と同じように。 - プライベートコンストラクタ。
- 静的ファクトリメソッド
of()
不変の型付きを作成するためPair
インスタンス(内部でプライベートコンストラクターを呼び出します)。 - オーバーライドされたhashCode()およびequals()メソッド に ハッシュベースのコレクションで目的の動作を確認する.
- オーバーライド
toString()
簡単に印刷する方法Pair
物体。
次のプログラムはそれを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; // Pair class class Pair<U, V> { public final U first; //ペアの最初のフィールド public final V second; //ペアの2番目のフィールド //指定された値で新しいペアを構築します private Pair(U first, V second) { this.first = first; this.second = second; } @Override //指定されたオブジェクトが現在のオブジェクトと「等しい」かどうかをチェックします public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Pair<?, ?> pair = (Pair<?, ?>) o; //基になるオブジェクトの`equals()`メソッドを呼び出します if (!first.equals(pair.first)) { return false; } return second.equals(pair.second); } @Override //ハッシュテーブルをサポートするオブジェクトのハッシュコードを計算します public int hashCode() { //基になるオブジェクトのハッシュコードを使用します return 31 * first.hashCode() + second.hashCode(); } @Override public String toString() { return "(" + first + ", " + second + ")"; } //型付きペア不変インスタンスを作成するためのファクトリメソッド public static <U, V> Pair <U, V> of(U a, V b) { //プライベートコンストラクタを呼び出します return new Pair<>(a, b); } } //JavaでPairクラスを実装するプログラム class Main { public static void main(String[] args) { Pair<String, Integer> p1 = Pair.of("John", 26); Pair<String, Integer> p2 = Pair.of("Tom", 30); Pair<String, Integer> p3 = Pair.of("John", 26); List<Pair<String, Integer>> pairs = new ArrayList<>(); pairs.add(p1); pairs.add(p2); pairs.add(p3); System.out.println(pairs); Set<Pair<String, Integer>> distinctPairs = new HashSet<>(pairs); System.out.println(distinctPairs); } } |
出力:
[(John, 26), (Tom, 30), (John, 26)]
[(John, 26), (Tom, 30)]
これで、Javaでのペアクラスの実装について説明しました。
こちらも参照: