java集合(十七) ---- TreeSet 类
目录
十七、TreeSet 类
17.1 位置
17.2 特点
17.3 二叉树
17.4 详解 TreeSet 类的存储过程
17.5 构造方法
17.6 常用方法
17.7 注意
17.6 代码举例一
17.7 代码举例二
十七、TreeSet 类
17.1 位置
TreeSet 类位于 java.util
包中
17.2 特点
- 底层采用 TreeMap 类来存储数据
- 底层采用二叉树的结构
- TreeSet 类中的元素是不重复的且有序的
- TreeSet 类中的元素遍历时采用中序遍历。所以对于 TreeSet 类来说,不管放入元素的顺序是什么样,读取出来的数据都是以升序排列
17.3 二叉树
- 二叉树:每个节点最多有两个子节点的有序树
- 子树:一个节点及其子节点组成的树
- 左子树:二叉树中左侧的子树。左子树上的元素都小于它的根节点
- 右子树:二叉树中右侧的子树。右子树上的元素都大于它的根节点
- 说明:在二叉树中,对于同一层的元素,左边的元素总是小于右边的元素
17.4 详解 TreeSet 类的存储过程
当二叉树中存入新元素时,新元素首先会与最顶层元素进行比较。如果小于最顶层元素,则新元素往左边走。如果大于最顶层元素,则新元素往右边走。一直这样比较下去,直到与最后一个元素进行比较。如果新元素小于最后一个元素,就将新元素放在最后一个元素的左边。如果大于最后一个元素,就将新元素放在最后一个元素的右边
举例:依次存入 13、8、19、19、0、11、35、50
中序遍历为先遍历左子树,再遍历根节点,最后再遍历右子树。即左根右。
遍历的结果为:0、8、11、13、19、35、50
17.5 构造方法
public TreeSet() | |
作用 | 创建一个空的 TreeSet 对象 |
public TreeSet(Comparator<? super E> comparator) | |
作用 | 创建一个具有指定比较器的空的 TreeSet 对象 注意:传入的是实现 Comparator 接口的类的对象 |
public TreeSet(Collection<? extends E> c) | |
作用 | 创建一个包含指定集合 c 的 TreeSet 对象 |
17.6 常用方法
public E first() | |
方法名 | first() |
作用 | 返回集合中遍历后的第一个元素 |
public E last() | |
方法名 | last() |
作用 | 返回集合中遍历后的最后一个元素 |
public E pollFirst() | |
方法名 | pollFirst() |
作用 | 移除集合中遍历后的第一个元素 |
public E pollLast() | |
方法名 | pollLast() |
作用 | 移除集合中遍历后的最后一个元素 |
public E lower(E e) | |
方法名 | lower() |
作用 | 返回集合中小于给定元素的最大元素。如果没有则返回 null |
public E floor(E e) | |
方法名 | floor() |
作用 | 返回集合中小于或等于给定元素的最大元素。如果没有则返回 null |
public E higher(E e) | |
方法名 | higher() |
作用 | 返回集合中大于给定元素的最小元素。如果没有则返回 null |
public E ceiling(E e) | |
方法名 | ceiling() |
作用 | 返回集合中大于或等于给定元素的最小元素。如果没有则返回 null |
说明 | 其他常用方法参考 Collection 接口 |
17.7 注意
- TreeSet 类存储自定义类时,需要自定义类实现了 Comparable 接口。若没实现 Comparable 接口,则 TreeSet 类也要有自己的比较器 Comparator。若都没有,则会出现错误
- TreeSet 类只能存储同种数据类型。不同种数据类型不能放在 TreeSet 类中
17.6 代码举例一
import java.util.TreeSet;public class Test {public static void main(String[] args) {TreeSet treeSet = new TreeSet();treeSet.add(13);treeSet.add(8);treeSet.add(19);treeSet.add(19);treeSet.add(0);treeSet.add(11);treeSet.add(35);treeSet.add(50);System.out.print("遍历结果为:");for (Object object : treeSet) {System.out.print(object);System.out.print(" ");}System.out.println();System.out.println("第一个元素为:" + treeSet.first());System.out.println("最后一个元素为:" + treeSet.last());}
}
17.7 代码举例二
import java.util.*;class Student{private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", age=" + age +'}';}public int getAge() {return age;}
}public class Test02 {public static void main(String[] args) {//Comparator 比较器Comparator<Student> comparator = new Comparator<Student>() {@Overridepublic int compare(Student obj1, Student obj2) {return obj2.getAge() - obj1.getAge();}};//TreeSet 类中传入比较器TreeSet treeSet = new TreeSet(comparator);treeSet.add(new Student("li",999));treeSet.add(new Student("li",999));treeSet.add(new Student("zhang",12));treeSet.add(new Student("wang",24));treeSet.add(new Student("wen",10));System.out.println("遍历结果为:");for (Object object : treeSet) {System.out.println(object);}}
}