对自定义对象的矢量进行排序

时间:2010-04-02 17:17:58

标签: java

我正在尝试在java中对Vector进行排序,但我的Vector不是int的向量,它是对象的向量

对象是:

public MyObject() {
    numObj = 0;
    price = new Price();
    pax = new Pax();        
}

所以我有一个Vector MyObject,我想按numObject订购,我该怎么做,我是java的新手?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:7)

我假设你正在使用Collections.sort(..)。您有两种选择:

实施Comparable的一个例子是:

public class MyObject implements Comparable<MyObject> {
   // ..... other fields and methods
   public int compareTo(MyObject other) {
        return numObj - other.getNumObj();
   } 
}

这意味着项目按升序排序。如果您想要其他自定义排序,可以创建一个定义自定义比较的Comparator并将其作为参数传递给Collections.sort(..);

答案 1 :(得分:2)

要对对象的矢量进行排序,首先MyObject类必须实现Comparable并实现方法compareTo(Object),然后使用Collections.sort(Vector)

class MyObject implements Comparable<MyObject> {
    public int compareTo(MyObject a) {
       //return either 1, 0, or -1
       //that you compare between this object and object a
  ``}
}

//and in your logic write this line
Collections.sort(myVector);

检查Vector

的JavaDoc

答案 2 :(得分:1)

实施Comparable将正常工作。但是,为了防止将来出现错误,应该谨慎行事。上面的实现非常适合排序,但如果您以后决定将MyObject实例放入SortedSet(例如TreeSet),则会出现意外行为。如果具有相同的numObject数据成员值,则不相同的项将相互冲突。发生这种情况是因为有序集使用Comparable实现(默认情况下)以确定相等性。

有关详细信息,请参阅http://eyalsch.wordpress.com/2009/11/23/comparators/