怎样用一种简便的方法让ArrayList中的元素反顺序?

secondflying 2005-10-31 09:50:18
比如说原来的事10,20,30,40,50,60
现在的顺序变为:60,50,40,30,20,10
谢谢!
...全文
829 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫炎圣骑 2005-11-01
up

学习了。。
回复
32zyc 2005-11-01
同意楼上的
回复
secondflying 2005-11-01
谢谢楼上的大侠们,找到我要的东东了
就是Collections.reverse(list);
shine333(enihs) 说得太好了,我本来以为是Collections.sort(arraylist,Collections.reverseOrder());这个函数的,可是运行的时候一直出现ClassCastException错误,我想了半天!看了你的说明茅塞顿开啊:)
再次谢谢各位!
回复
shine333 2005-11-01
首先,并不100%同意 treeroot 的"List是无序"的说法,List都是“有序的”
/**
* An ordered collection (also known as a <i>sequence</i>).

我认为正确的说法是,原来的List里面的每个元素,并不一定都是Comparable的,

所以使用Collections.sort(arraylist,Collections.reverseOrder());可能会得到ClassCastException,

例如
List list = new ArrayList();
list.add(new Object());
list.add(new Object());
Collections.sort(list, Collections.reverseOrder());
因为Collections.reverseOrder()返回的Comparator

public static Comparator reverseOrder() {
return REVERSE_ORDER;
}

private static final Comparator REVERSE_ORDER = new ReverseComparator();

/**
* @serial include
*/
private static class ReverseComparator implements Comparator,Serializable {
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 7207038068494060240L;

public int compare(Object o1, Object o2) {
Comparable c1 = (Comparable)o1; //<----------ClassCastException
Comparable c2 = (Comparable)o2;

int cmp = c1.compareTo(c2);
/*
* We can't simply return -cmp, as -Integer.MIN_VALUE ==
* Integer.MIN_VALUE.
*/
return -(cmp | (cmp >>> 1));
}
}

这是JDK1.4的代码,如果1.5的话,直接范型

public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c2.compareTo(c1);
}

所以,如果只是想打印,而并不像改变原来内容的话,
for (int i = list.size(); i-- > 0; ) {
Object obj = list.get(i);
}

如果想改变原有List顺序的话,则
Collections.reverse(list);
回复
treeroot 2005-11-01
bixuehui(边疆) Collections.reverse()

well done!
回复
liujiwe79 2005-11-01
直接用数组提供的排序,也可以用循环反相输出
Collections.sort(arraylist,Collections.reverseOrder());
回复
bixuehui 2005-11-01
ArrayList al=new ArrayList();
al.add("10");
al.add("30");
al.add("40");
al.add("50");
Collections.reverse(al);
for(int i=0;i<al.size();i++){
System.out.println(al.get(i));
}
回复
classjava 2005-11-01
if(list.size()>0)
{
for(int i=list.size()-1;i>=0;i--)
{
System.out.println(list.get(i));
}
}
回复
fbtdjs 2005-11-01
楼上的说的好!
回复
treeroot 2005-11-01
反顺序,不是说反序,原来的List并不是有序的,所以还是倒着打就可以了
回复
treeroot 2005-11-01
错就一个字
回复
whyxx 2005-11-01
你倒着取不就行了,干嘛要非要改变List本来的结构呢?
回复
f_acme 2005-11-01
java的库函数就是丰富
回复
believefym 2005-10-31
Collections.sort(arraylist,Collections.reverseOrder());
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告