2011-12-15 73 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