2011-12-15 76 views
2

我有一個ArrayListElementClass的多個實例。 ElementClass內部是一個名爲getCounter()的方法,該方法返回該類中變量counter的值。該變量只能有0,12作爲其值。如何排序ArrayList?

我需要按升序排序這些ArrayList條目,具體取決於方法getCounter()返回的值。我怎麼能做到這一點?我試圖研究幾種方法,但所有我發現的方法都需要設置一個值。例如:

list[i + 1] = temp

ArrayList■不要允許設置的值。例如:

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

上面的代碼不會讓我,因爲錯誤的編譯。 ArrayList唯一允許在列表(通過.add(item)方法)的末尾添加項目,並從一個特定的索引中刪除的項目(通過.remove(index)方法。)

如何可以僅使用add()remove()完成分揀方法?或者有另一種方法來排序Java中的ArrayLists?

回答

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

這也許就是降(還沒有測試過)。如果您反過來需要,則在減法中切換a和b。 – Thilo 2011-12-15 08:46:34

+0

在這段代碼中,`list`是我需要排序的`ArrayList`嗎? – alxcyl 2011-12-15 08:47:55

+1

是的,它排序到位(原始訂單丟失)。 – Thilo 2011-12-15 08:48:31

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
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