Map集合之TreeMap

TreeMap: 鍵不允許重復(fù) 底層是樹(shù)的結(jié)構(gòu) 可排序
TreeMap 如果將自定義類(lèi)放在 key的位置 ,那這個(gè)類(lèi)必須實(shí)現(xiàn) 自然排序或者 定制排序,否則報(bào) ClassCastException
如何實(shí)現(xiàn)排序? 兩種方式:
1 自然排序:
1> 創(chuàng)建需要排序的類(lèi) 實(shí)現(xiàn) Comparable <需要排序的類(lèi)型>
2> 重寫(xiě) compareTo 返回值如果返回0 證明兩個(gè)對(duì)象相同,則不能存入集合
如果返回 1 -1 升序 降序
調(diào)用者比參數(shù)大 返回1 就是升序
調(diào)用者比參數(shù)小 返回1 就是降序
允許出現(xiàn) 第一條件...第二條件...
3> 創(chuàng)建TreeSet集合 將類(lèi)放入 TreeSet集合的泛型中
2 定制排序:
1> 創(chuàng)建需要排序的類(lèi)
2> 創(chuàng)建比較器的類(lèi) 實(shí)現(xiàn) Comparator <需要排序的類(lèi)>
3> 重寫(xiě) compare方法
參數(shù) o1 類(lèi)似于 compareTo方法中的this 也就是調(diào)用者
參數(shù) o2 類(lèi)似于 compareTo方法中的參數(shù)
4> 創(chuàng)建TreeSet集合 泛型< 需要排序的類(lèi)> 構(gòu)造方法中 必須傳遞 比較器對(duì)象
舉個(gè)例子
自然排序

package com.qf.demo4;

import java.text.CollationKey;
import java.text.Collator;

public class Person implements Comparable<Person>{

    private String name;
    private int age;
    private String sex;
    public Person(String name, int age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public Person() {
        super();
    }
    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;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }

    @Override
    public int compareTo(Person o) {
        // this  o 
        // 第一條件  比年齡  降序
        if(this.age > o.age){
            return -1;
        }else if(this.age < o.age){
            return 1;
        }else{
            // 第二條件 姓名  升序
            Collator collator = Collator.getInstance();
            CollationKey key = collator.getCollationKey(this.name);
            CollationKey key2 = collator.getCollationKey(o.name);
            return key.compareTo(key2);
            
        }
    
    }
}

Text.java

package com.qf.demo4;

import java.util.Comparator;
import java.util.TreeMap;
/**
 * TreeMap  自定義類(lèi) 必須放在鍵的位置  , 自然排序 和定制排序 才能夠起到作用
 *  
 */
public class Test {

    public static void main(String[] args) {
        
        TreeMap<String, String> map = new TreeMap<>();
        map.put("元芳", "睡吧");
        map.put("達(dá)康書(shū)記", "不能睡");
        map.put("皮皮蝦", "能");
        System.out.println(map);
        
        TreeMap<Person, String> map2 = new TreeMap<>();
        map2.put(new Person("小喬", 18, "男"), "不可思議");
        map2.put(new Person("大喬", 18, "男"), "不可思議");
        map2.put(new Person("大喬", 18, "男"), "不可思議");
        System.out.println(map2);
        
        
        TreeMap<String, Person> map3 = new TreeMap<>();
        map3.put("hehe", new Person("程咬金", 1000, "男"));
        map3.put("haha", new Person("劉備", 2000, "男"));
        map3.put("xixi", new Person("劉備", 2000, "男"));
        System.out.println(map3);
        // 匿名內(nèi)部類(lèi)的形式 也可以幫助實(shí)現(xiàn)定制排序
        TreeMap<Person , String> map4 = new TreeMap<>(new Comparator<Person>() {

            @Override
            public int compare(Person o1, Person o2) {
            
                
                return 0;
            }
        });
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 以下是《瘋狂Java講義》中的一些知識(shí),如有錯(cuò)誤,煩請(qǐng)指正。 集合概述 Java集合可以分為Set、List、Ma...
    hainingwyx閱讀 653評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,767評(píng)論 18 399
  • 3.3 集合 一方面, 面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,為了方便對(duì)多個(gè)對(duì)象的操作,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 840評(píng)論 0 1
  • 面向?qū)ο笾饕槍?duì)面向過(guò)程。 面向過(guò)程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,221評(píng)論 0 4
  • 文 搬磚哥 《搬磚歌》 尚存一息不言輸,磚頭瓦粒鑄路途。 放眼祖國(guó)兩萬(wàn)里,多少鄉(xiāng)客在外泊。 一日三餐求溫飽,南來(lái)北...
    一枚搬磚哥閱讀 1,945評(píng)論 42 31

友情鏈接更多精彩內(nèi)容