2011-12-15 10 views
2

私はクラスElementClassの複数インスタンスのArrayListを持っています。 ElementClassの中にはgetCounter()という名前のメソッドがあり、そのクラスの中で変数counterの値を返します。この変数の値は0,1、または2です。ArrayListをどのようにソートできますか?

ArrayListのエントリは、メソッドgetCounter()が返す値に応じて昇順にソートする必要があります。どうすればそれを達成できますか?私はいくつかの方法を研究しようとしましたが、私が見つけたものはすべて価値を設定する必要があります。たとえば:

list[i + 1] = temp

しかしArrayList sが値を設定することはできません。例:

ArrayList<ElementClass> temp = list.get(i); 
list.get(i + 1) = temp; 

上記のコードはエラーのためにコンパイルできません。 ArrayList Sのみ(.add(item)方法によって)リストの末尾にアイテムを追加し、特定のインデックスから項目を削除可能(.remove(index)方法を介して)

どのようにのみadd()remove()を使用してソートを行うことができ方法?または、JavaでArrayListをソートする別の方法がありますか?

答えて

10
Collections.sort(list, new Comparator<ElementClass>() { 
    public int compare(ElementClass a, ElementClass b){ 
     return a.getCounter()-b.getCounter(); 
    } 
}); 
+0

たぶんそれは(降順それをテストしていない)。逆の場合は、減算でaとbを切り替えます。 – Thilo

+0

このコードでは、並べ替える必要のある 'ArrayList'は' list'ですか? – alxcyl

+1

はい、元の順序が失われます。 – Thilo

3
Collections.sort(list, new Comparator<ElementClass> { 
    @Override 
    public int compare(ElementClass o1, ElementClass o2) { 
     if (o1.getCounter() == o2.getCounter()) { 
      return 0; 
     } 
     return o1.getCounter() < o2.getCounter() ? -1 : 1; 
    } 
} 

getCounterが(のようなIntegerの代わりint)ラッパークラスを使用している場合、あなたが行うことができます:

Collections.sort(list, new Comparator<ElementClass> { 
    @Override 
    public int compare(ElementClass o1, ElementClass o2) { 
     return (o1.getCounter().compareTo(o2.getCounter()); 
    } 
} 
+0

整数を返すのではなく、Integerを返す必要があります。それはコードの2番目のスニペットの意味ですか? –

0
ArrayList<A> list = new ArrayList<A>(); 

     list.add(new A(5)); 
     list.add(new A(3)); 
     list.add(new A(1)); 
     list.add(new A(8)); 

     Comparator<A> comp = new Comparator<A>() { 
      public int compare(A a, A b){ 
       return a.getField()-b.getField(); 
      } 
     }; 

     Collections.sort(list, comp); 
     for(A a:list){ 
      System.out.println("Field value : "+a.getField()); 
     } 

OUTPUT:

Field value : 1 
Field value : 3 
Field value : 5 
Field value : 8 
+0

-1コードの代わりにスクリーンショットを投稿します。 –

+0

コード自体を貼り付けました。 –

関連する問題