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 回答