这篇文章主要讲解了“java中怎么使用Collections.reverse对list集合进行降序排序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中怎么使用Collections.reverse对list集合进行降序排序”吧!
今天无意中搜了一下Collections.reverse这个方法,结果发现有些人对它的误解蛮深的。reverse可以对指定列表进行降序排序,可是自己输出的结果都不是降序。
确实,使用Collections.reverse结合一定方法可以实现对list集合降序排序,但是直接使用Collections.reverse(list)这种方式来降序是错误的。
reverse的意思是反转,而不是降序。只是将list集合原来的顺序反转了一下,反转并不意味着降序了。所以要想实现降序,可以先对集合进行升序,然后再反转,这样就降序了。
举个例子:
import java.util.*;
public class Test {
private static Map<Integer, String> map = new HashMap<Integer, String>();
public static void main(String[] args) {
long[] data = {1506326821000l, 1506327060000l, 1506326880000l, 1506327000000l, 1506326940000l, 1506326760000l, 1506326700000l};
List list = new ArrayList<>();
for (long key : data) {
list.add(key);
}
System.out.println(list);
//先升序
Collections.sort(list);
System.out.println(list);
//再反转
Collections.reverse(list);
System.out.println(list);
}
}
输出:
[1506326821000, 1506327060000, 1506326880000, 1506327000000, 1506326940000, 1506326760000, 1506326700000]
[1506326700000, 1506326760000, 1506326821000, 1506326880000, 1506326940000, 1506327000000, 1506327060000]
[1506327060000, 1506327000000, 1506326940000, 1506326880000, 1506326821000, 1506326760000, 1506326700000]
public static void reverse(List<?> list) {
int size = list.size();
//REVERSE_THRESHOLD =18 数据倒叙大小限制
if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {
//折半处理,前后交换
//size>>1 相等于 size/2
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--){
swap(list, i, j);
}
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}
(1)next()
:返回集合中Iterator指向位置后面的元素
(2)previous()
:返回列表中ListIterator指向位置前面的元素
public static void swap(List<?> list, int i, int j) {
final List l = list;
//l.set(j, l.get(i)) 获取原来的数据
l.set(i, l.set(j, l.get(i)));
}
public ListIterator<E> listIterator(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException("Index: "+index);
return new ListItr(index);
}
public E set(int index, E element) {
rangeCheck(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
感谢各位的阅读,以上就是“java中怎么使用Collections.reverse对list集合进行降序排序”的内容了,经过本文的学习后,相信大家对java中怎么使用Collections.reverse对list集合进行降序排序这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。