您好,登錄后才能下訂單哦!
這篇文章主要講解了“java中怎么使用Collections.reverse對list集合進(jìn)行降序排序”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java中怎么使用Collections.reverse對list集合進(jìn)行降序排序”吧!
今天無意中搜了一下Collections.reverse這個方法,結(jié)果發(fā)現(xiàn)有些人對它的誤解蠻深的。reverse可以對指定列表進(jìn)行降序排序,可是自己輸出的結(jié)果都不是降序。
確實,使用Collections.reverse結(jié)合一定方法可以實現(xiàn)對list集合降序排序,但是直接使用Collections.reverse(list)這種方式來降序是錯誤的。
reverse的意思是反轉(zhuǎn),而不是降序。只是將list集合原來的順序反轉(zhuǎn)了一下,反轉(zhuǎn)并不意味著降序了。所以要想實現(xiàn)降序,可以先對集合進(jìn)行升序,然后再反轉(zhuǎn),這樣就降序了。
舉個例子:
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); //再反轉(zhuǎn) 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 數(shù)據(jù)倒敘大小限制 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)) 獲取原來的數(shù)據(jù) 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集合進(jìn)行降序排序”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java中怎么使用Collections.reverse對list集合進(jìn)行降序排序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。