Java集合框架 Map接口实现类--TreeMap的使用 & TreeMap和TreeSet的关系
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架 Map接口实现类--TreeMap的使用 & TreeMap和TreeSet的关系相关的知识,希望对你有一定的参考价值。
Map接口实现类:
1. TreeMap的使用
示例代码:
/**
* TreeMap的使用
* 存储结构:红黑树
*/
public class Demo3 {
public static void main(String[] args) {
TreeMap<Student, Integer> treeMap = new TreeMap<>();
Student s1 = new Student("小明", 36);
Student s2 = new Student("小红", 101);
Student s3 = new Student("小周", 10);
Student s4 = new Student("小李", 10);
//1.添加元素
treeMap.put(s1, 21);
treeMap.put(s2, 22);
treeMap.put(s3, 21);
//因为在Student类的compareTo()方法中, 学号一样就表示元素相同, 而TreeMap不允许存放重复的键,所以不可以添加s4
treeMap.put(s4, 21);
//不能直接打印,需要实现Comparable接口,因为红黑树需要比较大小
System.out.println("treeMap的元素内容为: \\n" + treeMap.toString());
//2.删除元素 因为在Student类的compareTo()方法中, 学号一样就表示元素相同, 所以可以直接删除匿名的对象
treeMap.remove(new Student("小周", 10));
System.out.println("删除小周后treeMap的元素内容为:\\n" + treeMap.toString() + "\\n");
//3.遍历
//3.1 使用keySet()
System.out.println("-----------------使用keySet()进行遍历-----------------");
for (Student key : treeMap.keySet()) {
System.out.println(key + " " + treeMap.get(key));
}
System.out.println();
//3.2 使用entrySet()
System.out.println("-----------------使用entrySet()进行遍历-----------------");
for (Map.Entry<Student, Integer> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
System.out.println();
//4.判断
System.out.println("treeMap是否包含s1: " + treeMap.containsKey(s1));
System.out.println("treeMap是否为空: " + treeMap.isEmpty());
}
}
/**
* 学生类
* 因为红黑树的左子节点和右子结点需要比较大小, 所以我们
* 实现Comparable接口
*/
class Student implements Comparable<Student> {
private final String name;
private final int stuId;
public Student(String name, int stuId) {
super();
this.name = name;
this.stuId = stuId;
}
public int getStuId() {
return stuId;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + stuId + "]";
}
/**
* MethodName: compareTo
* Description: 因为学号是不一样的所以我们就根据学号来进行比较
*
* @return int
* @date 2021/8/10 22:13
* @params: [student]
* @author Tianjiao
*/
@Override
public int compareTo(Student student) {
return this.stuId - student.getStuId();
}
}
运行结果:
2. TreeMap和TreeSet的关系
- 和HashSet类似,放在TreeMap之后讲便一目了然(TreeSet部分源码):
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
{
private transient NavigableMap<E,Object> m;
private static final Object PRESENT = new Object();
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
}
TreeSet的存储结构实际上就是TreeMap,再来看其存储方式:
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
它的add方法调用的就是TreeMap的put方法,将元素作为key传入到存储结构中。
以上是关于Java集合框架 Map接口实现类--TreeMap的使用 & TreeMap和TreeSet的关系的主要内容,如果未能解决你的问题,请参考以下文章
Java知识33 集合框架 List接口 Map 和set多测师