2012-04-13 37 views
7

所以我想要在java中的对象arraylist。如何排序对象java的数组列表?

我有object1.numberobject2.numberobject3.number,等等......但这些对象具有其它特性,除了number,如namedistance等..

所以,如果它是在一个array排序字符串,只是将一个字符串放在temporal中,让另一个字符串取代它的位置...但是在一个对象的araryList中,我该怎么做?

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

谢谢。

+2

贵教授想要实现的排序算法自己呢? – 2012-04-13 17:33:41

+0

@joncarl说的是一个好点,如果是的话,你需要查看bubblesort(它相当容易实现,但不是那么快) – 2012-04-13 17:40:32

+0

是的,我会实现插入排序算法。 – user1253201 2012-04-13 18:24:00

回答

0

您需要使用比较器来达到此目的。

4

您需要实现可比接口

implements Comparable

该做的工作是

public int compareTo(Object obj) 
{ 
} 

请注意,对象往往是取而代之的是一个完整的对类型,因为一般语法的方法它可以在实现语句中使用(如下所示)。

完整的例子就是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); 
    } 
} 
0

根据您的问题,我认为你应该自己来实现排序算法。如果是这种情况,您可以操纵ArrayList中元素的位置,它的作用与普通数组有所不同。看看add(int index, E element)index参数让你决定在ArrayList中添加元素的位置。

+0

我想你想让他指向set方法而不是add方法。添加方法,幻灯片元素而不是替换它们。 – 2012-04-13 17:37:11

+0

@ColinD不一定。虽然你可以用另一个元素替换一个元素,但你也可以删除一个元素,然后将它放到新的位置,这取决于算法。 – 2012-04-13 17:39:22

+0

除非您正在查看已排序的数组并添加新元素,否则使用add()将会隐藏性能损失,因为它需要移动所有具有较高索引的元素。这同样适用于remove()。使用set()是O(1)方法来更新数组中的条目,这是您想要进行排序的内容。 – 2012-04-13 17:45:20

8

实现自己的比较器:

​​
+2

你的意思是'Collections'不是数组,他在这里处理'ArrayList'? – 2014-03-19 23:08:50

+0

ArrayList是一个集合。 – 2014-03-20 03:36:07

+0

Arrays.sort用于数组,如Object []'。如问题中提到的那样,要对ArrayList进行排序,您可以使用'Collections.sort',正如@Papa_Jay指出的那样。 – njzk2 2014-11-19 17:11:06

0

使用Collections.sort()排序在Java中8的ArrayList:

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