我如何对ArrayList进行排序?

时间:2011-12-15 08:43:15

标签: java sorting arraylist

我有ArrayList个类ElementClass的多个实例。 ElementClass内部是一个名为getCounter()的方法,它返回该类中变量counter的值。此变量只能包含012作为其值。

我需要按升序排序这些ArrayList条目,具体取决于方法getCounter()返回的值。我怎么能做到这一点?我尝试研究几种方法,但我发现的所有方法都需要设置一个值。例如:

list[i + 1] = temp

但是ArrayList s不允许设置值。例如:

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

由于错误,上面的代码不允许我编译。 ArrayList只允许在列表末尾添加项目(通过.add(item)方法)并从特定索引中删除项目(通过.remove(index)方法。)

如何仅使用add()remove()方法完成排序?或者是否有另一种方法在Java中对ArrayLists进行排序?

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分: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());
    }
}

答案 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());
        }

输出:

Field value : 1
Field value : 3
Field value : 5
Field value : 8