概述
- 底层是二叉树 ( 红黑树 ) 的数据结构
- 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 + "]";
}
}
统计字符串中字符出现次数(理解)