如何将Comparator类用于对象的双倍数据标记?

时间:2012-04-12 09:08:59

标签: java comparison comparator comparable

我想用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....

我想通过距离数据标记来命令我的矢量元素。 我尝试使用比较器类,但我失败了,请有人可以实现一个适用于这种情况的比较器类吗?

3 个答案:

答案 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());
    }
});
  1. 在作业的左侧使用List,因为您应该始终针对接口进行编程。
  2. 我已将getter和setter方法添加到您的MyClass
  3. 另一种选择是制作课程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());