java list排序

来源:http://www.cnblogs.com/0201zcr/archive/2016/04/15/5395639.html
-Advertisement-
Play Games

1、簡介 這個和數組的排序又不一樣了。 其實Java針對數組和List的排序都有實現,對數組而言,你可以直接使用Arrays.sort,對於List和Vector而言,你可以使用Collections.sort方法。 Java API針對集合類型的排序提供了2個方法: 如果集合裡面的元素都是相同類型 ...


1、簡介

  這個和數組的排序又不一樣了。

  其實Java針對數組和List的排序都有實現,對數組而言,你可以直接使用Arrays.sort對於List和Vector而言,你可以使用Collections.sort方法

  Java API針對集合類型的排序提供了2個方法:

java.util.Collections.sort(java.util.List)

java.util.Collections.sort(java.util.List, java.util.Comparator)

  如果集合裡面的元素都是相同類型的,並且實現了Comparable介面,那麼可以直接調用第一個方法。

  如果你有其它的排序的想法,比如你不想按照自然排序進行,還可以傳一個Comparator過去,比如反向。

  元素不相同的情況比較複雜,可以暫時不用考慮。

2、通過實現Comparable介面來實現list的排序

  假如現在我們有一個Person類的list集合,要讓其按照一個Order屬性進行排序,我們可以讓Person類實現Comparable介面,重寫其CompareTo方法即可。具體實現如下:

1)、Person實體類

public class Person implements Comparable<Person> {
    private String name;
    private Integer order;
 
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
 
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
 
    /**
     * @return the order
     */
    public Integer getOrder() {
        return order;
    }
 
    /**
     * @param order
     *            the order to set
     */
    public void setOrder(Integer order) {
        this.order = order;
    }
 
@Override
public int compareTo(Person arg0) { return this.getOrder().compareTo(arg0.getOrder()); //這裡定義你排序的規則。 } }

   通過重寫Comparable介面的compareTo方法,可以讓程式按照我們想要的排列方式進行排序,如:這裡我讓Person按照order屬性升序排序。

2)、測試類

public static void main(String[] args) {
    //初始化數據
    List<Person> listA = new ArrayList<Person>();
    Person p1 = new Person();
    Person p2 = new Person();
    Person p3 = new Person();
 
    p1.setName("name1");
    p1.setOrder(1);
    p2.setName("name2");
    p2.setOrder(2);
    p3.setName("name3");
    p3.setOrder(3);
 
    listA.add(p2);
    listA.add(p1);
    listA.add(p3);

    //排序
    Collections.sort(listA);

    //列印排序後的Person
    for (Person p : listA) {
        System.out.println(p.getName());
    }
}

3)、結果:

name1
name2
name3

3、通過重載Collections.sort方法

  直接重載java.util.Collections.sort(java.util.List, java.util.Comparator) 方法。可以靈活的修改我們排序的方式,具體實現如下:

1)、Person實體類

  和上面的類相同,但沒實現Comparable介面

public class Person {
    private String name;
    private Integer order;
 
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
 
    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
 
    /**
     * @return the order
     */
    public Integer getOrder() {
        return order;
    }
 
    /**
     * @param order
     *            the order to set
     */
    public void setOrder(Integer order) {
        this.order = order;
    }
 
}

2)、測試類

public static void main(String[] args) {
        List<Person> listA = new ArrayList<Person>();
        Person p1 = new Person();
        Person p2 = new Person();
        Person p3 = new Person();
 
        p1.setName("name1");
        p1.setOrder(1);
        p2.setName("name2");
        p2.setOrder(2);
        p3.setName("name3");
        p3.setOrder(3);
 
        listA.add(p2);
        listA.add(p1);
        listA.add(p3);
         
        //直接在這裡添加我們的排序規則
        Collections.sort(listA, new Comparator<Person>() {
            public int compare(Person arg0, Person arg1) {
                return arg0.getOrder().compareTo(arg1.getOrder());
            }
        });
         
        for (Person p : listA) {
            System.out.println(p.getName());
        }
    }

  從上面看到,直接在Conllections.sort()方法中重寫了一個Comparator介面,可以在不同的地方使用Person集合的不同排序方法。如上面還是按照Person的order屬性升序排列,我只要改寫該方法,就可以在其他地方按照其他的規則對我的list集合進行排序,但是這樣子代碼看起來會比前面的那種方式繁瑣。

3)、結果

name1
name2
name3

  致謝:感謝您的閱讀!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天碰到一個非常奇怪的問題,機器環境是JDK8、Tomcat8,把jQuery MiniUI ( for Java Eclipse)下載後導入到Eclipse中,首頁可以顯示,但運行操作資料庫的頁面出錯。在該項目下新建一個簡單的jsp頁面,發現也不能運行,出現錯誤提示: org.apache.jas ...
  • 使用python的Flask框架時,參考《Flask Web開發》一書時,發現書中可以在全局使用Permission.FOLLOW變數。 但是自己在嘗試是,確提示變數沒有定義。經過搜索,找到了答案。 在Flask框架中,把變數註冊到全局,有兩個方法: 1、在主app或者藍本中通過裝飾器註冊 2、添加 ...
  • 本文主要針對java反射進行學習,以java.lang.reflect包中的介面和類進行學習和理解。文章目錄如下: 1. java反射概念 2. java反射包介面詳解 3. java發射包中類詳解 4. java反射的應用例子 一:java反射概念 JAVA反射機制是在運行狀態中,對於任意一個類, ...
  • 1、問題使用jQuery的ajax請求 Servlet 時,返回沒有進入ajax的success回調函數,瀏覽器控制台顯示 [HTTP/1.1 405 Method not allowed]。 2、解決方法網上調查,大多都是如下解釋 Apache、IIS、Nginx等絕大多數web伺服器,都不允許靜 ...
  • 1、基本概念 a、路徑和路徑長度 若在一棵樹中存在著一個結點序列 k1,k2,……,kj, 使得 ki是ki+1 的雙親(1<=i<j),則稱此結點序列是從 k1 到 kj 的路徑。 從 k1 到 kj 所經過的分支數稱為這兩點之間的路徑長度,它等於路徑上的結點數減1. b、結點的權和帶權路徑長度 ...
  • 我也是PHP新手,通過w3cschool瞭解了一下php基本原理之後就開寫了。但仍是菜鳥。 先不管3DES加密的方法對不對,方法都是網上的,在運行的時候報了個錯,把小弟整死了。找來找去終於自己摸出了方法。 代碼可以不看,就看裡面的一句:$td = mcrypt_module_open( MCRYPT ...
  • python有很多擴展模塊需要安裝 這個時候萬能的pip就可以提供幫助 首頁進入官網下載壓縮包: https://pypi.python.org/pypi/pip#downloads 解壓文件 cmd進入解壓文件路徑下輸入 python setup.py install 下來要使用pip一定要先進入 ...
  • 目錄 1. Apache Lucene(全文檢索引擎)—創建索引:http://www.cnblogs.com/hanyinglong/p/5387816.html 2. Apache Lucene(全文檢索引擎)—搜索:http://www.cnblogs.com/hanyinglong/p/53 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...