7

所以我想要一个java中的对象数组列表。

我有object1.numberand object2.number, object3.number, 等等...但是那些对象除了 , 还有其他属性number, 比如name, distance, 等等...

因此,如果它正在对 a 中的字符串进行排序,array那么将一个字符串放入 atemporal并让另一个字符串代替它......但是在araryList对象中,我该怎么做呢?

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

谢谢。

4

6 回答 6

8

实现你自己的比较器:

Arrays.sort(yourArray, new Comparator<YourClass>() {
        @Override
        public int compare(YourClass o1, YourClass o2) {
            //compare object properties
        }
});
于 2012-04-13T17:36:50.973 回答
4

您需要实现可比较的接口

implements Comparable

做这项工作的方法是

public int compareTo(Object obj)
{
}

请注意,由于可以在 implements 语句中使用的通用语法(如下所示),因此 object 经常被完整的类型替换。

教程文档中提供了一个完整的示例,希望对您有所帮助

一个完整的例子(取自上面的链接如下),我添加了这个,以防链接在某个时候失效

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);
    }
}
于 2012-04-13T17:34:41.357 回答
0

为此,您需要使用比较器。

于 2012-04-13T17:34:24.067 回答
0

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

于 2012-04-13T17:36:16.413 回答
0

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

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

于 2012-04-13T17:37:53.843 回答
0

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

Collections.sort(array, new Comparator<Class>() {
    @Override
    public int compare(Class o1, Class o2) {
        //compare object properties
    }
});
于 2014-11-19T17:07:32.470 回答