我想用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....
我想通过距离数据标记来命令我的矢量元素。 我尝试使用比较器类,但我失败了,请有人可以实现一个适用于这种情况的比较器类吗?
答案 0 :(得分: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());
}
});
List
,因为您应该始终针对接口进行编程。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)
。
答案 1 :(得分: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());
你有你的矢量排序:)
答案 2 :(得分: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());