TreeMap


两种排序方法同时存在时,以第二种为准。
Integer默认从小到大升序排列,而现在如果我们想要降序,默认的比较规则不能满足需求,这个时候就可以用第二种方式指定比较规则。

默认情况下就是按键的升序排列,因为Integer实现了Comparable接口


Interger中:


Integer Double 默认情况下都是按照升序排列的
String 按照字母在Ascii码表中对应的数字进行升序排列 abcdefg...
- 升序排列
点击查看代码
package com.tiheima.a01mymap;
import java.util.TreeMap;
public class TreeMapDemo2 {
public static void main(String[] args) {
TreeMap<Integer, String> tm = new TreeMap<>();
//Integer Double 默认情况下都是按照升序排列的
//String 按照字母在Ascii码表中对应的数字进行升序排列 abcdefg...
tm.put(2, "铅笔");
tm.put(1, "可乐");
tm.put(3, "雪碧");
tm.put(4, "泡泡糖");
System.out.println(tm);
}
}
- 降序排列
创建集合对象时,传递比较器对象
点击查看代码
package com.tiheima.a01mymap;
import java.util.Comparator;
import java.util.TreeMap;
public class TreeMapDemo1 {
public static void main(String[] args) {
TreeMap<Integer, String> tm = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
tm.put(2, "铅笔");
tm.put(1, "可乐");
tm.put(3, "雪碧");
tm.put(4, "泡泡糖");
System.out.println(tm);
}
}

键是自定义对象,需要指定排序规则
点击查看代码
package com.tiheima.a01mymap;
import java.util.Comparator;
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;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student1{name = " + name + ", age = " + age + "}";
}
@Override
//this:表示当前要添加的元素
//o:表示已经在红黑树存在的元素
//返回值:
//负数:表示当前要添加的元素是小的,存左边
//正数:表示当前要添加的元素是大的,存右边
//0:表示当前要添加的元素已经存在,舍弃
public int compareTo(Student1 o) {
//按年龄升序排列
int i = this.getAge() - o.getAge();
//年龄一样按照姓名的字母排列
//这里的compareTo就是按照字符串里面的每一个字符按照ASCII码表升序排列
i = i == 0 ? this.getName().compareTo(o.getName()) : i;
return i;
}
}
点击查看代码
package com.tiheima.a01mymap;
import java.util.TreeMap;
public class TreeMapDemo3 {
public static void main(String[] args) {
TreeMap<Student1, String> tm = new TreeMap<>();
Student1 s1 = new Student1("zhangsan", 23);
Student1 s2 = new Student1("lisi", 24);
Student1 s3 = new Student1("wangwu", 25);
Student1 s4 = new Student1("zhaoliu", 23);
tm.put(s1, "河南");
tm.put(s2, "上海");
tm.put(s3, "山东");
tm.put(s4, "四川");
System.out.println(tm);
}
}

如果题目中没有要求对结果进行排序,默认使用HashMap
如果题目中要求对结果进行排序,则使用TreeMap
点击查看代码
public class TreeMapDemo4 {
public static void main(String[] args) {
/*
需求:字符串"aababcabcdabcde"
请统计字符串中每一个字符出现的次数,并按照以下格式输出输出结果:
a(5)b(4)c(3)d(2)e(1)
键:要统计的内容
值:表示次数
如果题目中没有要求对结果进行排序,默认使用HashMap
如果题目中要求对结果进行排序,则使用TreeMap
*/
//1.定义字符串
String s = "aababcabcdabcde";
//2.创建集合
TreeMap<Character, Integer> tm = new TreeMap<>();
//3.遍历字符串得到里面的每一个字符
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//判断c在集合中是否已经存在
//存在,表示当前字符又出现了一次
//不存在,表示当前字符第一次出现
if (tm.containsKey(c)) {
//存在
int count = tm.get(c);
count++;
tm.put(c, count);
}else {
//不存在
tm.put(c, 1);
}
}
//4.按照指定格式打印
StringBuilder sb = new StringBuilder();
tm.forEach((key, value) -> sb.append(key).append("(").append(value).append(")"));
System.out.println(sb);
}
}

浙公网安备 33010602011771号