【Java基础18_3】TreeMap类

概述

  • 底层是二叉树 ( 红黑树 ) 的数据结构
  • TreeMap能够对键进行排序
    • 按照自然顺序排序
    • 按照比较器排序

构造方法

构造方法作用
public TreeMap ( )使用自然顺序对键进行排序
public TreeMap ( Comparator comparator )使用比较器对键进行排序


TreeSet自然排序Demo

import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
/*
 * TreeMep的简单Demo
 */
public class TreeMapDemo {

    public static void main(String[] args) {

        //创建TreeMap集合
        TreeMap<Integer,String> ts =new TreeMap<>();

        //往集合里放数据
        ts.put(1, "田馥甄");
        ts.put(5, "银临");
        ts.put(8, "谢春花");
        ts.put(11, "Taylor");

        //获取键值对集合
        Set<Entry<Integer, String>> entrySet = ts.entrySet();

        System.out.println("序号\t\t歌手");

        //遍历键值对分别获取键和值
        for (Entry<Integer, String> entry : entrySet) {
            System.out.println(entry.getKey()+"\t\t"+entry.getValue());
        }
    }

    /*
     * 结果:
     * 序号                   歌手
        1          田馥甄
        5          银临
        8          谢春花
        11      Taylor
     */

}

TreeSet按照比较器排序Demo

  • 由于排序是按照键排序,当键是自定义对象时,就需要使用TreeMap的有参构方法public TreeMap ( Comparator
package com.itbull.treeset;

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

public class TreeMapDemo2 {

    public static void main(String[] args) {

        //创建自定义类对象
        Singer s1 = new Singer("田馥甄", "小幸运", 28);
        Singer s2 = new Singer("银临", "牵丝戏", 20);
        Singer s4 = new Singer("孙燕姿", "天黑黑", 22);
        Singer s3 = new Singer("Taylor", "TikTok", 26);

        //创建键为自定义类Singer的TreeMap对象
        TreeMap<Singer,String> tm =new TreeMap<>(new Comparator<Singer>() {

            @Override
            public int compare(Singer o1, Singer o2) {

                //先比较姓名长度
                int num = o1.getName().length()-o2.getName().length();
                //再比较年龄
                int num2=(num==0)?o1.getAge()-o2.getAge():num;

                return num2;
            }
        });

        //将数据放入TreeMap
        tm.put(s1, "台湾");
        tm.put(s2, "大陆");
        tm.put(s3, "美国");
        tm.put(s4, "台湾");

        //获取Entry键值对集合
        Set<Entry<Singer, String>> entrySet = tm.entrySet();

        //遍历键值对获取键和值的数据
        for (Entry<Singer, String> entry : entrySet) {

            Singer key = entry.getKey();

            //获取键中的歌手信息
            System.out.println(key.getName()+"---"+key.getAge()+"---"+key.getSongName()+"-----"+entry.getValue());
        }
    }


}
package com.itbull.treemap;

//歌手类
public class Singer {
private String name;
private String songName;
private int age;

public Singer() {
    super();
}
public Singer(String name, String songName, int age) {
    super();
    this.name = name;
    this.songName = songName;
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSongName() {
    return songName;
}
public void setSongName(String songName) {
    this.songName = songName;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
@Override
public String toString() {
    return "Singer [name=" + name + ", songName=" + songName + ", age=" + age + "]";
}

}

统计字符串中字符出现次数(理解)

Demo传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值