欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用Collections.reverse對(duì)list集合進(jìn)行降序排序

 更新時(shí)間:2021年11月30日 14:02:43   作者:我是李超人  
這篇文章主要介紹了Java使用Collections.reverse對(duì)list集合進(jìn)行降序排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用Collections.reverse對(duì)list集合進(jìn)行降序排序

今天無(wú)意中搜了一下Collections.reverse這個(gè)方法,結(jié)果發(fā)現(xiàn)有些人對(duì)它的誤解蠻深的。下面是一個(gè)有百萬(wàn)訪問(wèn)量博主寫(xiě)的,reverse可以對(duì)指定列表進(jìn)行降序排序,可是自己輸出的結(jié)果都不是降序。

這里寫(xiě)圖片描述

確實(shí),使用Collections.reverse結(jié)合一定方法可以實(shí)現(xiàn)對(duì)list集合降序排序,但是直接使用Collections.reverse(list)這種方式來(lái)降序是錯(cuò)誤的。

reverse的意思是反轉(zhuǎn),而不是降序。只是將list集合原來(lái)的順序反轉(zhuǎn)了一下,反轉(zhuǎn)并不意味著降序了。所以要想實(shí)現(xiàn)降序,可以先對(duì)集合進(jìn)行升序,然后再反轉(zhuǎn),這樣就降序了。

舉個(gè)例子:

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]

Collections.reverse原理

    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)) 獲取原來(lá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;
    }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    淺析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    這篇文章主要介紹了SpringBoot中使用thymeleaf找不到.HTML文件的原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • j2Cache線上異常排查問(wèn)題解決記錄分析

    j2Cache線上異常排查問(wèn)題解決記錄分析

    這篇文章主要為大家介紹了關(guān)于j2Cache線上異常排查的問(wèn)題解決記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Java List 用法實(shí)例詳解

    Java List 用法實(shí)例詳解

    這篇文章主要介紹了Java List 用法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • SpringMVC?Restful風(fēng)格與中文亂碼問(wèn)題解決方案介紹

    SpringMVC?Restful風(fēng)格與中文亂碼問(wèn)題解決方案介紹

    Restful就是一個(gè)資源定位及資源操作的風(fēng)格,不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格,是對(duì)http協(xié)議的詮釋,下面這篇文章主要給大家介紹了關(guān)于SpringMVC對(duì)Restful風(fēng)格支持的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Java中Static關(guān)鍵字的五種用法詳解

    Java中Static關(guān)鍵字的五種用法詳解

    這篇文章主要介紹了Java中static的五種用法:修飾成員變量,修飾成員方法,修飾內(nèi)部類,靜態(tài)代碼塊,靜態(tài)導(dǎo)包,想詳細(xì)了解的小伙伴可以參考閱讀本文
    2023-03-03
  • Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)

    Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以參考下。
    2020-02-02
  • IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法

    IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法

    本文主要介紹了IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java?Io?File文件操作基礎(chǔ)教程

    Java?Io?File文件操作基礎(chǔ)教程

    這篇文章主要介紹了Java?Io?File文件操作,在這里需要注意File只能訪問(wèn)文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫(xiě)文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile,需要的朋友可以參考下
    2022-05-05
  • Java利用jenkins做項(xiàng)目的自動(dòng)化部署

    Java利用jenkins做項(xiàng)目的自動(dòng)化部署

    這篇文章主要介紹了Java利用jenkins做項(xiàng)目的自動(dòng)化部署,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • SpringBoot SSO輕松實(shí)現(xiàn)(附demo)

    SpringBoot SSO輕松實(shí)現(xiàn)(附demo)

    這篇文章主要介紹了SpringBoot SSO輕松實(shí)現(xiàn)(附demo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論