[英]How can I sort an ArrayList?
我有一个ElementClass
类的多个实例的ArrayList
。 ElementClass
有一个名为getCounter()
的方法,它返回该类中变量counter
的值。 此变量只能有0
, 1
,或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.