0

次のような myClass でいっぱいのベクターを注文したい:

class MyClass
{

double distance;
String name;

 public void MyClass()
 {}

}

そして、私のベクトルは次のとおりです。

MyVector<MyClass>myVector = new MyVector<MyClass>();

MyVector.add(myClass1);
MyVector.add(myClass2);
MyVector.add(myClass3);
//Etc....

ベクトルの要素を距離データ タグで並べ替えたいと思います。コンパレータークラスを使用しようとしましたが失敗しました。この場合に機能するコンパレータークラスを実装してください。

4

3 に答える 3

4

これがあなたのやり方ですか?さて、いくつかの変更点があることに注意してください。

List<MyClass> myVector = new Vector<MyClass>();

myVector.add(myClass1);
myVector.add(myClass2);
myVector.add(myclass3);


Collections.sort(myVector, new Comparator<MyClass>() {
    public int compare(MyClass one, MyClass two) {
        return Double.valueOf(one.getDistance()).compareTo(two.getDistance());
    }
});
  1. Listインターフェイスに対して常にプログラミングする必要があるため、割り当ての左側でa を使用します。
  2. に getter メソッドと setter メソッドを追加しましMyClassた。

ただし、他のオプションは、クラスを作成することComparableです。

class MyClass implements Comparable<MyClass> {
    private double distance;
    private String name;

    @Override
    public int compareTo(MyClass other) {
        return Double.valueOf(this.distance).compareTo(other.distance);
    }

    ...
    getters and setters
    ...
}

次に、単に書くことができますCollections.sort(myVector)

于 2012-04-12T09:12:35.740 に答える
1

コンパレータは簡単に実装できます。次のようになります。

public class MyComparator implements Comparator<MyClass> {

public int compare(MyClass o1, MyClass o2) { 

if(o1.getDistance() > o2.getDistance()) {
return 1;
} else if(o1.getDistance() < o2.getDistance()) { 
return -1;
}

//they are equal 
return 0;

}
}

次に、次のことを行います。

Collection.sort(myVector, new MyComparator());

そして、あなたはあなたのベクトルをソートしました:)

于 2012-04-12T09:17:09.400 に答える
1

クラスでコンパレータクラスを次のMyClassように定義できます。

public static class Comp implements Comparator<MyClass> {
    public int compareTo(MyClass v1, MyClass v2) {
        if (v1.distance < v2.distance) {
            return -1;
        } else {
            return v1.distance > v2.distance ? 1 : 0;
        }
    }
}

次に、次の方法で簡単に並べ替えることができます。

Collections.sort(myVector, new MyClass.Comp());

于 2012-04-12T09:29:48.850 に答える