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

關(guān)于TreeMap自定義排序規(guī)則的兩種方式

 更新時(shí)間:2024年08月01日 09:58:58   作者:訾博ZiBo  
這篇文章主要介紹了關(guān)于TreeMap自定義排序規(guī)則的兩種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

TreeMap自定義排序規(guī)則的兩種方式

1、概述

TreeMap基于二叉樹數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),同時(shí)實(shí)現(xiàn)了SortedMap接口以保障元素順序存取,默認(rèn)按照鍵的升序排序,也可以自定義排序比較器;

TreeMap常用于實(shí)現(xiàn)排序的映射列表,在使用TreeMap時(shí)其key必須實(shí)現(xiàn)Comparable接口采用自定義的比較器,否則會(huì)拋出java.lang.ClassCastExption異常;

2、演示:其key實(shí)現(xiàn)Comparable接口

代碼演示:

package com.zibo.java.february.third;

import java.util.Set;
import java.util.TreeMap;

public class StuTreeMap {
    public static void main(String[] args) {
        TreeMap<Student,String> treeMap = new TreeMap<>();
        treeMap.put(new Student("大哥",24),"大哥");
        treeMap.put(new Student("二哥",23),"二哥");
        treeMap.put(new Student("三哥",22),"三哥");
        treeMap.put(new Student("四哥",21),"四哥");
        Set<Student> studentSet = treeMap.keySet();
        for (Student student : studentSet) {
            System.out.println(student.toString());
        }
    }
}
// 這里就省略getter和setter方法了
class Student implements Comparable<Student>{

    private String name;
    private int age;

    public Student() {
    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        // 實(shí)現(xiàn)Comparable接口在這里也是自定義排序規(guī)則
        // 如果什么也不寫,直接默認(rèn)return 0的話,只能存儲(chǔ)第一個(gè)被put的元素
        // 注意:升序就這么個(gè)寫法,不要看網(wǎng)上其他的什么相等返回0,相等的話要返回this.age,否則會(huì)出問題
        if(age > o.age){
            return 1;
        }else if(age < o.age){
            return -1;
        }
        return this.age;
    }
}

運(yùn)行結(jié)果:

Student{name='四哥', age=21}
Student{name='三哥', age=22}
Student{name='二哥', age=23}
Student{name='大哥', age=24}

3、演示:采用自定義比較器

代碼演示:

package com.zibo.java.february.third;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;

public class StuTreeMap2 {
    public static void main(String[] args) {
        TreeMap<Student2,String> treeMap = new TreeMap<>(new Comparator<Student2>() {
            @Override
            public int compare(Student2 o1, Student2 o2) {
                // 基本和key實(shí)現(xiàn)Comparable接口,重寫compareTo方法一致
                // 升序排序就是這么寫的
                if(o1.getAge() > o2.getAge()){
                    return 1;
                }else if(o1.getAge() < o2.getAge()){
                    return -1;
                }
                // 相等的時(shí)候不能返回0
                return o1.getAge();
            }
        });
        treeMap.put(new Student2("大哥",24),"大哥");
        treeMap.put(new Student2("二哥",23),"二哥");
        treeMap.put(new Student2("三哥",22),"三哥");
        treeMap.put(new Student2("四哥",21),"四哥");
        Set<Student2> studentSet = treeMap.keySet();
        for (Student2 student : studentSet) {
            System.out.println(student.toString());
        }
    }
}

class Student2{

    private String name;
    private int age;

    public Student2() {
    }

    public Student2(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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

運(yùn)行結(jié)果:

Student{name='四哥', age=21}
Student{name='三哥', age=22}
Student{name='二哥', age=23}
Student{name='大哥', age=24}

總結(jié)

兩種方式區(qū)別不大,一個(gè)是key實(shí)現(xiàn)Comparable接口,重寫compareTo()方法,另一個(gè)是在TreeMap的構(gòu)造函數(shù)中創(chuàng)建new Comparator匿名內(nèi)部類,重寫compare 方法;

兩者實(shí)現(xiàn)的功能都是一樣的;注意寫法要按照代碼演示中寫;

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

相關(guān)文章

  • ZooKeeper官方文檔之Java客戶端開發(fā)案例翻譯

    ZooKeeper官方文檔之Java客戶端開發(fā)案例翻譯

    網(wǎng)上有很多ZooKeeper的java客戶端例子,我也看過很多,不過大部分寫的都不好,有各種問題。兜兜轉(zhuǎn)轉(zhuǎn)還是覺得官方給的例子最為經(jīng)典,在學(xué)習(xí)之余翻譯下來,供朋友們參考
    2022-01-01
  • 通過原理解析Spring mvc的內(nèi)置編碼過濾器

    通過原理解析Spring mvc的內(nèi)置編碼過濾器

    這篇文章通過原理主要給大家解析了關(guān)于Spring mvc的內(nèi)置編碼過濾器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • java在hashmap初始化時(shí)賦初值過程解析

    java在hashmap初始化時(shí)賦初值過程解析

    這篇文章主要介紹了java在hashmap初始化時(shí)賦初值過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java自定義Scanner類似功能類的實(shí)例講解

    java自定義Scanner類似功能類的實(shí)例講解

    這篇文章主要介紹了java自定義Scanner類似功能類的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java中序列化與反序列化的特性解讀

    Java中序列化與反序列化的特性解讀

    這篇文章主要介紹了Java中序列化與反序列化的特性解讀,當(dāng)我們需要將內(nèi)存中的對(duì)象持久化到磁盤,數(shù)據(jù)庫中時(shí), 當(dāng)我們需要與瀏覽器進(jìn)行交互時(shí),當(dāng)我們需要實(shí)現(xiàn) RPC 時(shí), 這個(gè)時(shí)候就需要序列化和反序列化了,需要的朋友可以參考下
    2023-08-08
  • Java中toString函數(shù)的使用示例代碼

    Java中toString函數(shù)的使用示例代碼

    toString()函數(shù)用于將當(dāng)前對(duì)象以字符串的形式返回,比如我定義了一個(gè)User類,創(chuàng)建了一個(gè)user對(duì)象,然后使用相應(yīng)命令去打印user對(duì)象,本文結(jié)合示例代碼介紹了toString函數(shù)的使用,需要的朋友可以參考下
    2024-02-02
  • 解讀classpath讀取resources目錄下的文件

    解讀classpath讀取resources目錄下的文件

    這篇文章主要介紹了解讀classpath讀取resources目錄下的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java利用POI讀寫Excel文件工具類

    Java利用POI讀寫Excel文件工具類

    這篇文章主要為大家詳細(xì)介紹了Java利用POI讀寫Excel文件的工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決場(chǎng)景分析

    Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決場(chǎng)景分析

    當(dāng)運(yùn)行一個(gè)Spring Boot項(xiàng)目時(shí),如果未設(shè)置JVM內(nèi)存參數(shù),Spring Boot默認(rèn)會(huì)采用JVM自身默認(rèn)的配置策略,接下來通過本文給大家介紹Docker環(huán)境下Spring Boot應(yīng)用內(nèi)存飆升分析與解決方法,需要的朋友參考下吧
    2021-08-08
  • 在Mac下IDEA安裝并使用protobuf方式(Java)

    在Mac下IDEA安裝并使用protobuf方式(Java)

    這篇文章主要介紹了在Mac下IDEA安裝并使用protobuf方式(Java),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

大兴区| 和龙市| 乡宁县| 枞阳县| 霍邱县| 苗栗县| 建阳市| 贡觉县| 确山县| 苗栗县| 曲松县| 怀远县| 察隅县| 阳泉市| 五峰| 合川市| 望奎县| 潜山县| 泰宁县| 柞水县| 承德市| 建水县| 永德县| 高碑店市| 法库县| 舒兰市| 日土县| 迁西县| 普定县| 综艺| 岳阳市| 金门县| 五大连池市| 乡城县| 呼和浩特市| 柯坪县| 嘉义市| 淮北市| 云梦县| 南投县| 久治县|