如何对java对象的arraylist进行排序?

时间:2012-04-13 17:31:29

标签: java sorting object arraylist

所以我想在java中使用对象的arraylist。

我有object1.numberobject2.numberobject3.number等...但这些对象除了number之外还有其他属性,例如name,{{ 1}}等...

因此,如果它正在distance中对字符串进行排序,那么将字符串放在array中,让另一个字符串取代它......但是在{{1}中对象,我该怎么做?

我可以将对象移动到数组的那个位置吗?

感谢。

6 个答案:

答案 0 :(得分:8)

实施自己的比较器:

Arrays.sort(yourArray, new Comparator<YourClass>() {
        @Override
        public int compare(YourClass o1, YourClass o2) {
            //compare object properties
        }
});

答案 1 :(得分:4)

您需要实现类似的界面

implements Comparable

完成工作的方法是

public int compareTo(Object obj)
{
}

请注意,对象通常由full on类型替换,因为通用语法可以在implements语句中使用(如下所示)。

一个完整的例子是here in the tutorial docs希望这会有所帮助

一个完整的例子(从上面的链接中取出如下),我已经添加了这个以防万一链接在某个时候死了

import java.util.*;

public class Name implements Comparable<Name> {
    private final String firstName, lastName;

    public Name(String firstName, String lastName) {
        if (firstName == null || lastName == null)
            throw new NullPointerException();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String firstName() { return firstName; }
    public String lastName()  { return lastName;  }

    public boolean equals(Object o) {
        if (o == null || !(o instanceof Name))
            return false;
        Name n = (Name) o;
        return n.firstName.equals(firstName) && n.lastName.equals(lastName);
    }

    public int hashCode() {
        return 31*firstName.hashCode() + lastName.hashCode();
    }

    public String toString() {
    return firstName + " " + lastName;
    }

    public int compareTo(Name n) {
        int lastCmp = lastName.compareTo(n.lastName);
        return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
    }
}

文章中的客户端代码是:

import java.util.*;

public class NameSort {
    public static void main(String[] args) {
        Name nameArray[] = {
            new Name("John", "Smith"),
            new Name("Karl", "Ng"),
            new Name("Jeff", "Smith"),
            new Name("Tom", "Rich")
        };

        List<Name> names = Arrays.asList(nameArray);
        Collections.sort(names);
        System.out.println(names);
    }
}

答案 2 :(得分:0)

您需要为此目的使用比较器。

答案 3 :(得分:0)

根据您的问题,我认为您应该自己实施排序算法。如果是这种情况,您可以操纵ArrayList中元素的位置,它只是与常规数组有点不同。看看add(int index, E element)index参数允许您决定在ArrayList中添加元素的位置。

答案 4 :(得分:0)

要像传统数组那样操作ArrayList的条目,请使用ArrayList.set(int,E)。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#set%28int,%20E%29

答案 5 :(得分:0)

使用Collections.sort()对Java 8中的ArrayList进行排序:

Collections.sort(array, new Comparator<Class>() {
    @Override
    public int compare(Class o1, Class o2) {
        //compare object properties
    }
});