1. ホーム
  2. java

[解決済み] 値のペアのJavaコレクション?(タプル?)

2022-03-25 19:54:56

質問

Javaにはマップがあり、マップの各エントリーの型を定義できるのがいいですね。 <String, Integer> .

私が求めているのは、コレクションの各要素が値のペアであるようなタイプだ。 ペアの各値は、宣言時に定義される独自の型(上記のStringとIntegerの例のように)を持つことができます。

コレクションは与えられた順序を維持し、(マップのように)値の1つをユニークキーとして扱わない。

基本的に、私は以下のようなタイプのARRAYを定義したい。 <String,Integer> または他の2つのタイプ。

2つの変数以外何もないクラスを作ることもできますが、それは冗長すぎるように思います。

また、2次元の配列を使うこともできますが、さまざまな型を使用する必要があるため、OBJECTの配列にする必要があり、その場合、常にキャストする必要があります。

コレクションに保存するのはペアだけなので、1つのエントリに2つの値だけでいいんです。 このようなものは、クラスを使用せずに存在するのでしょうか? ありがとうございます。

どのように解決するのですか?

Pair クラスは、自分で書くのが簡単なジェネリックの例の一つです。例えば、私の頭の上から。

public class Pair<L,R> {

  private final L left;
  private final R right;

  public Pair(L left, R right) {
    assert left != null;
    assert right != null;

    this.left = left;
    this.right = right;
  }

  public L getLeft() { return left; }
  public R getRight() { return right; }

  @Override
  public int hashCode() { return left.hashCode() ^ right.hashCode(); }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof Pair)) return false;
    Pair pairo = (Pair) o;
    return this.left.equals(pairo.getLeft()) &&
           this.right.equals(pairo.getRight());
  }

}

そして、そう、これはネット上の複数の場所に、完成度や機能の差こそあれ、存在しているのです。 (上の私の例は、不変であることを意図しています)。