1

a のオブジェクトを同じ型のオブジェクトに置き換える最もクリーンな方法は何ですかList。ただし、必ずしも等しいとは限りません。基本的に、Setオブジェクトを追加するときの動作が必要ですが、等式ではなくタイプに基づいています。(編集) また、広告掲載順も保持する必要があります。

必ずしもList他のデータ構造を使用することで十分であるとは限りません。私が必要とするのは、この動作です:

interface A<T> {
  T getData();
}

class B implements A<String> {
  private final String data;

  public B(String data) {
    this.data = data;
  }

  public String getData() {
    return data;
  }
}

class C implements A<String> {
  private final String data;

  public C(String data) {
    this.data = data;
  }

  public String getData() {
    return data;
  }
}


Set<A> set = new SomeSet<A>();
set.add(new B("one"));
set.add(new C("two"));
set.add(new C("three"));

Setには 2 つの要素が含まれている必要がnew B("one")ありnew C("three")ます。

4

3 に答える 3

3

TreeSetはこれに適していると思います。のように並べられていListます。 このコンストラクターを使用すると、Comparator. タイプで比較でき、それらが等しい場合は、セットに存在するのは 1 つだけです。

于 2013-10-24T18:01:11.610 に答える
0

O(n) のパフォーマンスが問題にならないと仮定すると、おそらく次のように Vector を拡張する必要があります。

public class SetVector extends Vector {
  // override the add() function
  public boolean add(E e) {
     int position = indexOf(e);
     if (position == -1)
       return super.add(e);
     set(position, e);
  }
}

SetVector をインスタンス化するだけで、希望する動作が得られると思います。

于 2013-10-25T00:07:02.797 に答える