2012-04-13 24 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 
    } 
});