集合框架(TreeSet排序--存儲字元串---自定義對象)

来源:https://www.cnblogs.com/ztg-java-xuexi/archive/2022/03/26/16060750.html
-Advertisement-
Play Games

TreeSet:能夠對元素按照某種規則進行排序。 * 排序有兩種方式 * A:自然排序 * B:比較器排序 * * TreeSet集合的特點:排序和唯一 * * 通過觀察TreeSet的add()方法,我們知道最終要看TreeMap的put()方法 A:自然排序 1 public class Tre ...


TreeSet:能夠對元素按照某種規則進行排序。
* 排序有兩種方式
* A:自然排序
* B:比較器排序
*
* TreeSet集合的特點:排序和唯一
*
* 通過觀察TreeSet的add()方法,我們知道最終要看TreeMap的put()方法

 

A:自然排序

 1 public class TreeSetDemo {
 2     public static void main(String[] args) {
 3         // 創建集合對象
 4         // 自然順序進行排序
//無參構造--自然排序
5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7 // 創建元素並添加 8 // 20,18,23,22,17,24,19,18,24 9 ts.add(20); 10 ts.add(18); 11 ts.add(23); 12 ts.add(22); 13 ts.add(17); 14 ts.add(24); 15 ts.add(19); 16 ts.add(18); 17 ts.add(24); 18 19 // 遍歷 20 for (Integer i : ts) { 21 System.out.println(i); 22 } 23 } 24 }

 學生類----存儲自定義對象

package Day17;
//Comparable此介面強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,
// 類的 compareTo 方法被稱為它的自然比較方法。
public class Student1 implements Comparable<Student1> {
    private String name;
    private int age;

    //構造
    public Student1(){}

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //按照姓名的長度進行排序
    //Comparable此介面強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,
     // 類的 compareTo 方法被稱為它的自然比較方法。
     //重寫介面的compareTo方法

public int compareTo(Student1 m){
//首先進行姓名長度的比較
        int num  = this.name.length()-m.name.length();
        //如果姓名長度相同再比較其姓名是否相同
        int num2 = num==0? this.name.compareTo(m.name):num;
        //姓名長度相同==名字相同==再不其年齡是否相同
        int num3 = num2==0?this.age-m.age:num2;

        return num3;
    }

}

 測試類---存儲自定義對象

package Day17;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.TreeSet;
//按照姓名的長度進行排序
public class Lx2 {
    public static void main(String[] args) {
        //創建TreeSet集合對象---給出泛型 =---無參構造自然排序
TreeSet<Student1> AA =new TreeSet<Student1>(); //創建學生類對象 Student1 A = new Student1("趙同剛哈哈",25); Student1 B = new Student1("王麗",25); System.out.println(A.compareTo(B)); Student1 C = new Student1("趙同剛哈哈",27); Student1 D = new Student1("王麗麗",25); Student1 E = new Student1("朱慶娜哈",24); Student1 F = new Student1("劉詩詩哈哈哈哈哈",25); Student1 G = new Student1("諸葛亮哈哈哈哈",28); //將學生類對象的數據添加到集合中 //添加時。add方法中就具有Comparable介面中的compareTo方法 //在學生類中進行對compareTo的重寫--制定輸出的標準 //此時的輸出標準是--姓名長度--姓名是否相同--年齡 AA.add(A); AA.add(B); AA.add(C); AA.add(D); AA.add(E); AA.add(F); AA.add(G); //遍歷輸出查看 for(Student1 e : AA ){ System.out.println(e.getName()+"---"+e.getAge()); } } }

 

TreeSet比較器排序

學生類

public class Student1{
    private String name;
    private int age;

    //構造
    public Student1(){}

    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

 實現類

  package cn.itcast_07;

import java.util.Comparator;

public class MyComparator implements Comparator<Student> {

    @Override
    public int compare(Student s1, Student s2) {
        // int num = this.name.length() - s.name.length();
        // this -- s1
        // s -- s2
        // 姓名長度
        int num = s1.getName().length() - s2.getName().length();
        // 姓名內容
        int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
        // 年齡
        int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
        return num3;
    }

}

 

 

 

測試類

 

package cn.itcast_07;

import java.util.Comparator;
import java.util.TreeSet;

/*
 * 需求:請按照姓名的長度排序
 * 
 * TreeSet集合保證元素排序和唯一性的原理
 * 唯一性:是根據比較的返回是否是0來決定。
 * 排序:
 *         A:自然排序(元素具備比較性)
 *             讓元素所屬的類實現自然排序介面 Comparable
 *         B:比較器排序(集合具備比較性)
 *             讓集合的構造方法接收一個比較器介面的子類對象 Comparator
 */
public class TreeSetDemo {
    public static void main(String[] args) {
        // 創建集合對象
        // TreeSet<Student> ts = new TreeSet<Student>(); //自然排序
        // public TreeSet(Comparator comparator) //比較器排序
        // TreeSet<Student> ts = new TreeSet<Student>(new MyComparator());

        // 如果一個方法的參數是介面,那麼真正要的是介面的實現類的對象
        // 而匿名內部類就可以實現這個東西
        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                // 姓名長度
                int num = s1.getName().length() - s2.getName().length();
                // 姓名內容
                int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
                        : num;
                // 年齡
                int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;
                return num3;
            }
        });

        // 創建元素
        Student s1 = new Student("linqingxia", 27);
        Student s2 = new Student("zhangguorong", 29);
        Student s3 = new Student("wanglihong", 23);
        Student s4 = new Student("linqingxia", 27);
        Student s5 = new Student("liushishi", 22);
        Student s6 = new Student("wuqilong", 40);
        Student s7 = new Student("fengqingy", 22);
        Student s8 = new Student("linqingxia", 29);

        // 添加元素
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        ts.add(s6);
        ts.add(s7);
        ts.add(s8);

        // 遍歷
        for (Student s : ts) {
            System.out.println(s.getName() + "---" + s.getAge());
        }
    }
}

 


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

-Advertisement-
Play Games
更多相關文章
  • 1、break: 翻譯成中文是打斷、中斷的意思,作用是結束當前的迴圈體,後面的迴圈也不再繼續了,經常使用在for、while迴圈裡面; 2、continue: 翻譯成中文是繼續、延續的意思,作用是跳出本次迴圈,繼續執行下一次迴圈(不是繼續執行當前次迴圈),和break最大的區別就是還會繼續執行下一個 ...
  • JavaWeb-CSS 部分圖片不能提取 具體的編寫規則可以參考樣式表中文手冊(網上可以直接下載) CSS:層疊式樣式表,決定頁面的美觀程度 CSS語法 基礎語法 <!-- 1.CSS最基本的分類:標簽樣式表,類樣式表,ID樣式表 2.CSS從位置位置上的分類:嵌入式樣式表,內部式樣式表,外部時樣式 ...
  • Javascript中的for是如何實現迴圈的? 一、語法結構 單for迴圈 for (初始化變數; 條件表達式; 操作表達式) { 迴圈體 } 雙重for迴圈(也叫迴圈嵌套) for (外層初始化變數; 外層的表達式; 外層的操作表達式) { for (裡層的初始化變數; 裡層的條件表達式; 裡層 ...
  • 裝飾器模式是什麼 是一種結構型設計模式,它允許你將對象放入包含行為的特殊封裝對象中來為原對象綁定新的行為。由於目標對象和裝飾器遵循同一介面,所以你可以對目標進行多次裝飾,最後結果為所有裝飾器疊加的行為。 為什麼用裝飾器模式 需要動態的給一個對象增加功能,並且可以動態的撤銷的時候。當系統需要添加新的功 ...
  • 編寫一個程式,獲取10個1至20的隨機數,要求隨機數不能重覆。 * * 分析: * A:創建隨機數對象 * B:創建一個HashSet集合 * C:判斷集合的長度是不是小於10 * 是:就創建一個隨機數添加 * 否:不搭理它 * D:遍歷HashSet集合 */ package Day17; imp ...
  • 在項目中需要用到group by進行聚合計算,在計算的同時也要查出一些其他欄位來返回給前端。於是就有了這個錯誤的出現。 先簡單復現我所寫的sql,其實sql非常簡單。 select channel_name as channelName, brand_name as brandName, sum(a ...
  • 在項目開發過程中,不可避免的會碰到需要強制增加審計日誌的需求,那具體如何做呢,本文將告訴你答案! ...
  • IO多路復用通過某種機制使進程監聽某些文件描述符,當文件描述符中有讀或寫就緒時,進程能夠收到系統內核發送的相應通知從而進行相應的IO操作;IO多路復用有:select、poll、epoll等模式,這裡主要介紹select;select本質上也是同步IO,調用時阻塞自己,IO事件就緒後被喚醒返回負責讀 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...