最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

使用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]

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

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

相關(guān)文章

  • Spring Boot集成Ehcache緩存解決方式

    Spring Boot集成Ehcache緩存解決方式

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot集成Ehcache緩存解決方式,需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • SpringBoot中的共享Session域詳解

    SpringBoot中的共享Session域詳解

    這篇文章主要介紹了SpringBoot中的共享Session域詳解,使用Redis解決Session共享問題的原理非常簡單,就是把原本存儲在不同服務(wù)器上的Session拿出來放在一個獨立的服務(wù)器上,需要的朋友可以參考下
    2024-01-01
  • 使用Iterator刪除List中的多個元素操作

    使用Iterator刪除List中的多個元素操作

    這篇文章主要介紹了使用Iterator刪除List中的多個元素操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • MyBatis異常-Property ''configLocation'' not specified, using default MyBatis Configuration

    MyBatis異常-Property ''configLocation'' not specified, using d

    今天小編就為大家分享一篇關(guān)于MyBatis異常-Property 'configLocation' not specified, using default MyBatis Configuration,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • JAVA SFTP文件上傳、下載及批量下載實例

    JAVA SFTP文件上傳、下載及批量下載實例

    本篇文章主要介紹了JAVA SFTP文件上傳、下載及批量下載實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Java泛型的簡單實例

    Java泛型的簡單實例

    這篇文章介紹了Java泛型的簡單實例,有需要的朋友可以參考一下
    2013-10-10
  • 基于SpringBoot實現(xiàn)Web應(yīng)用的登錄與退出功能

    基于SpringBoot實現(xiàn)Web應(yīng)用的登錄與退出功能

    登錄與退出功能作為 Web 應(yīng)用中的基礎(chǔ)且重要的組成部分,直接關(guān)系到用戶的安全和隱私保護(hù),所以本文給大家介紹了基于SpringBoot實現(xiàn)Web應(yīng)用的登錄與退出功能,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-04-04
  • Java?Map.values()方法之如何獲取Map集合中的所有鍵值對象

    Java?Map.values()方法之如何獲取Map集合中的所有鍵值對象

    這篇文章主要介紹了Java?Map.values()方法之如何獲取Map集合中的所有鍵值對象問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA如何進(jìn)行全局搜索圖文教程

    IDEA如何進(jìn)行全局搜索圖文教程

    idea全稱為IntelliJ?IDEA,在業(yè)界被公認(rèn)為最好用的Java開發(fā)工具之一,下面這篇文章主要給大家介紹了關(guān)于IDEA如何進(jìn)行全局搜索的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 解讀JDK1.8?默認(rèn)使用什么垃圾收集器

    解讀JDK1.8?默認(rèn)使用什么垃圾收集器

    這篇文章主要介紹了解讀JDK1.8?默認(rèn)使用什么垃圾收集器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

迁西县| 峡江县| 始兴县| 白河县| 厦门市| 西宁市| 罗田县| 堆龙德庆县| 西丰县| 剑阁县| 唐海县| 昆山市| 灵丘县| 陆川县| 华坪县| 澄迈县| 贵港市| 炎陵县| 连州市| 诸城市| 鄢陵县| 定西市| 普兰店市| 城市| 永宁县| 保亭| 清远市| 卫辉市| 沂南县| 云安县| 永新县| 双城市| 宁陕县| 砀山县| 桐城市| 海兴县| 正宁县| 黑河市| 瓮安县| 涞源县| 郑州市|