2012-04-13 10 views
7

私はJavaのオブジェクトのarraylistが欲しいです。オブジェクトのarraylistをソートする方法java?

それはarrayそれで文字列を並べ替えたのであれば、私はobject1.numberobject2.numberobject3.number、などを持っている...しかし、これらのオブジェクトは、などnamedistance、などnumber以外の他の特性を持っている...

文字列をtemporalに置き、もう一方の文字列を置き換えてください... araryListオブジェクトでは、どうすればいいですか?

オブジェクトを配列のその位置に移動することはできますか?

ありがとうございました。

+2

あなたの教授はあなたがソートアルゴリズムを自分で実装したいのか? –

+0

@joncarlは良い点だと思うので、もしかするとすれば、bubblesort(実装はかなり簡単ですが速くはありません)を見ている必要があります。 –

+0

はい、私は挿入ソートalgを実装します。 – user1253201

答えて

0

この目的でコンパレータを使用する必要があります。あなたが仕事をする方法が

public int compareTo(Object obj) 
{ 
} 

で同等のインターフェースに

implements Comparable

を実装する必要が

4

は、オブジェクトがしばしば一般的な構文の型にフルに置き換えられますのでご注意くださいこれは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); 
    } 
} 
0

、私はあなたがソートアルゴリズムを自分で実装することになっていることをそれを取ります。その場合、ArrayList内の要素の位置を操作できます。通常の配列とはちょっと違うだけです。 add(int index, E element)をご覧ください。 indexパラメータを使用すると、要素を追加するArrayListの場所を指定できます。

+0

私はあなたが彼をaddメソッドの代わりにsetメソッドに向かわせたいと思っています。 addメソッドは、要素を置き換えるのではなくスライドします。 –

+0

@ColinD必ずしもそうではありません。ある要素を別の要素に置き換えることもできますが、要素を削除して新しい位置に配置することもできます。種類はアルゴリズムによって少し異なります。 –

+0

ソートされた配列を見つめて新しい要素を追加しない限り、add()を使用すると、より高いインデックスを持つすべての要素をシフトする必要があるため、パフォーマンス上の不利益が隠されます。同じことがremove()にも適用されます。 set()を使用すると、配列内の項目を更新するO(1)の方法でソートすることができます。 –

8

独自の比較子を実装します。

​​
+2

'Collections'は配列ではなく、ここで' ArrayList'を扱っていますか? –

+0

ArrayListはCollectionです。 –

+0

Arrays.sortは 'Object []'のような配列用です。 @Papa_Jayで指摘されているように、質問で述べたように、ArrayListをソートするには 'Collections.sort'を使います。 – njzk2

0

のJava 8でのArrayListをソートするCollections.sort()に使用:

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