簡體   English   中英

我如何對ArrayList進行排序?

[英]How can I sort an ArrayList?

我有一個ElementClass類的多個實例的ArrayList ElementClass有一個名為getCounter()的方法,它返回該類中變量counter的值。 此變量只能有01 ,或2作為其值。

我需要根據方法getCounter()返回的值按升序對這些ArrayList條目進行排序。 我怎么能做到這一點? 我嘗試研究幾種方法,但我發現的所有方法都需要設置一個值。 例如:

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進行排序?

Collections.sort(list, new Comparator<ElementClass>() {
   public int compare(ElementClass a, ElementClass b){
      return a.getCounter()-b.getCounter();
   }
});
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());
    }
}
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM