集合(23):Map接口的子类----TreeMap类
1、TreeMap类概述
键是红黑树结构,可以保证键的排序和唯一性
2、TreeMap案例
(1)HashMap<String,String>
(2)HashMap<Student,String>
(1)HashMap<String,String>
import java.util.Objects;
public class Student4 {
private String name;
private int age;
public Student4() {
}
public Student4(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 +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student4 student4 = (Student4) o;
return age == student4.age &&
Objects.equals(name, student4.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
TreeMap:底层数据结构是红黑树
HashMap<String,String>
*/
public class TreeMapDemo1 {
public static void main(String[] args) {
//创建集合对象
TreeMap<String, String> map = new TreeMap<>();
//添加元素到集合中
map.put("hello", "你好");
map.put("java", "面向对象编程的语言");
map.put("hadoop", "适合海量数据存储的分布式计算和分布式存储的平台");
map.put("hive", "是数据仓库建模工具之一");
map.put("java", "面向对象编程的语言2");
//遍历
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> kv : entries) {
String key = kv.getKey();
String value = kv.getValue();
System.out.println(key + "--" + value);
}
}
}
执行结果如下:
hadoop--适合海量数据存储的分布式计算和分布式存储的平台
hello--你好
hive--是数据仓库建模工具之一
java--面向对象编程的语言2
Process finished with exit code 0
(2)HashMap<Student,String>
import java.util.Objects;
public class Student4 {
private String name;
private int age;
public Student4() {
}
public Student4(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 +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student4 student4 = (Student4) o;
return age == student4.age &&
Objects.equals(name, student4.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/*
TreeMap<Student,String>
键:Student
值:String
*/
public class TreeMapDemo2 {
public static void main(String[] args) {
//创建TreeMap对象
TreeMap<Student4, String> map = new TreeMap<>(new Comparator<Student4>() {
@Override
public int compare(Student4 o1, Student4 o2) {
//年龄
int i = o1.getAge()-o2.getAge();
//姓名
int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;
return i2;
}
});
//创建学生对象
Student4 s1 = new Student4("唐伯虎", 18);
Student4 s2 = new Student4("祝枝山", 19);
Student4 s3 = new Student4("朱佳乐", 20);
Student4 s4 = new Student4("杨旭", 17);
Student4 s5 = new Student4("唐伯虎", 18);
//添加元素到集合中
map.put(s1, "唐伯虎点秋香");
map.put(s2, "小鸡吃米图");
map.put(s3, "水淹电脑");
map.put(s4, "申报才子");
map.put(s5, "唐伯虎点秋香");
//遍历
Set<Map.Entry<Student4, String>> entries = map.entrySet();
for (Map.Entry<Student4, String> entry : entries) {
Student4 key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "---" + value);
}
}
}
执行结果如下:
Student{name='杨旭', age=17}---申报才子
Student{name='唐伯虎', age=18}---唐伯虎点秋香
Student{name='祝枝山', age=19}---小鸡吃米图
Student{name='朱佳乐', age=20}---水淹电脑
Process finished with exit code 0