中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中怎么使用Collections.reverse對list集合進行降序排序

發布時間:2021-11-30 15:28:44 來源:億速云 閱讀:240 作者:iii 欄目:開發技術

這篇文章主要講解了“java中怎么使用Collections.reverse對list集合進行降序排序”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java中怎么使用Collections.reverse對list集合進行降序排序”吧!

使用Collections.reverse對list集合進行降序排序

今天無意中搜了一下Collections.reverse這個方法,結果發現有些人對它的誤解蠻深的。reverse可以對指定列表進行降序排序,可是自己輸出的結果都不是降序。

java中怎么使用Collections.reverse對list集合進行降序排序

確實,使用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]

Collections.reverse原理

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集合進行降序排序這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永昌县| 太谷县| 岗巴县| 武城县| 中超| 渝中区| 吴忠市| 唐海县| 尚义县| 西青区| 平安县| 中方县| 九江市| 巩留县| 合水县| 呼伦贝尔市| 盐边县| 新民市| 西华县| 策勒县| 农安县| 资中县| 青铜峡市| 星座| 牡丹江市| 沐川县| 雅江县| 酉阳| 崇礼县| 南安市| 宁陵县| 中方县| 内乡县| 济阳县| 金溪县| 武义县| 亳州市| 新河县| 清原| 田林县| 永川市|