如何对java对象的arraylist进行排序?
所以我想在java中使用对象的arraylist。
我有object2.number
和object2.number
, object3.number
等…但是这些对象除了number
之外还有其他属性,比如name
, distance
等……
因此,如果它正在对array
的字符串进行排序,那就是将字符串放在一个temporal
,让另一个字符串取代它……但是在对象的araryList
中,我该怎么做?
我可以将对象移动到数组的那个位置吗?
谢谢。
实现自己的比较器:
Arrays.sort(yourArray, new Comparator() { @Override public int compare(YourClass o1, YourClass o2) { //compare object properties } });
您需要实现类似的界面
implements Comparable
做这项工作的方法是
public int compareTo(Object obj) { }
请注意,对象通常由full on类型替换,因为generics语法可以在implements语句中使用(如下所示)。
一个完整的例子就在教程文档中,希望这会有所帮助
一个完整的例子(从上面的链接获取如下),我已经添加了这个,以防链接在某些时候死亡
import java.util.*; public class Name implements Comparable { 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 names = Arrays.asList(nameArray); Collections.sort(names); System.out.println(names); } }
您需要使用比较器来实现此目的。
根据您的问题,我认为您应该自己实施排序算法。 如果是这种情况,您可以操纵ArrayList中元素的位置,它只是与常规数组有点不同。 看看add(int index, E element)
。 index
参数允许您决定在ArrayList中添加元素的位置。
要像传统数组那样操作ArrayList的条目,请使用ArrayList.set(int,E)。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#set%28int,%20E%29
使用Collections.sort()
在Java 8中对ArrayList进行排序:
Collections.sort(array, new Comparator() { @Override public int compare(Class o1, Class o2) { //compare object properties } });