1
class Obj{
    int x;
    int y;
    Date z;

    public int compareTo(Obj other) {
        if(this.z.getTime() > other.getZ().getTime())
            return 1;
        else if(this.z.getTime() < other.getZ().getTime())
            return -1;
        else 
            return 0;
    }

    boolean equals(Obj other) {
        if(x== other.x && y == other.y) 
            return true; 
        else 
            return false;
    }
}

list<Obj>、私は重複を削除し、同じ ID を持つ複数のオブジェクトがある場合は最新のもの (最新の z) のみを選択する必要があります。

sortedSet = new TreeSet(objList);
reversedSortedList = new ArrayList(sortedSet); //This will not be needed if we reverse the comparator logic. However it is not good. 
uniqueSet = new HashSet(reverseSortedList);
return uniqueSet;

これは物事を行う良い方法ですか。または、物事を行うためのよりクリーンで優れた方法があります。また、リスト内の要素の数は1000〜10000の間にあります

ありがとう

4

2 に答える 2

0

コンパレーターは次のように最適化できます。

public int compareTo(Obj other) {
        return (int)(this.z.getTime() - other.getZ().getTime());
}
于 2013-11-05T09:13:31.830 に答える
0

オブジェクトにcompareToメソッドを実装する代わりに、逆にソートする機能を持つオブジェクトを比較する別の Comparator を作成できます(実装したロジックとは逆です)(クラスが Comparable インターフェイスを実装していないことがわかります) )。

そうすれば、逆に並べ替えられたセットを直接取得でき、いつでも簡単にロジックを変更したり、さまざまな場所でさまざまなコンパレータを使用したりできます。

1000 ~ 10000 の場合、TreeSet を使用するのが Compartors の適切なオプションです。

于 2013-11-05T09:06:26.620 に答える