当前位置: 首页 > news >正文

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 特点

  1. 底层采用 TreeMap 类来存储数据
  2. 底层采用二叉树的结构
  3. TreeSet 类中的元素是不重复的且有序的
  4. TreeSet 类中的元素遍历时采用中序遍历。所以对于 TreeSet 类来说,不管放入元素的顺序是什么样,读取出来的数据都是以升序排列

17.3 二叉树

  1. 二叉树:每个节点最多有两个子节点的有序树
  2. 子树:一个节点及其子节点组成的树
  3. 左子树:二叉树中左侧的子树。左子树上的元素都小于它的根节点
  4. 右子树:二叉树中右侧的子树。右子树上的元素都大于它的根节点
  5. 说明:在二叉树中,对于同一层的元素,左边的元素总是小于右边的元素

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 注意

  1. TreeSet 类存储自定义类时,需要自定义类实现了 Comparable 接口。若没实现 Comparable 接口,则 TreeSet 类也要有自己的比较器 Comparator。若都没有,则会出现错误
  2. 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);}}
}


相关文章:

  • win10系统外接触控显示屏触摸校准
  • mysql 学习
  • Sequelize mysql2驱动 不支持 caching_sha2_password
  • 【wsl】docker
  • datawhale Dify动手实践教程 第1次笔记
  • 课设作业图书管理系统
  • UWB协议精读:IEEE 802.15.4z-2020,15. HRP UWB PHY, STS, HRP-ERDEV, BPRF, HPRF,
  • 探秘卷积神经网络(CNN):从原理到实战的深度解析
  • 红队攻防渗透技术实战流程:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份
  • 生成对抗网络(GAN)与深度生成模型实战
  • CppCon 2016 学习:Rainbow Six Siege: Quest for Performance
  • 移动端 WebView 页面性能调试实战:WebDebugX等工具协同与优化
  • 【pytest进阶】Pytest之conftest详解
  • MCP(模型上下文协议)协议和Http协议对比
  • 窄带和宽带谁略谁优
  • python web开发-Flask 重定向与URL生成完全指南
  • 3.时间序列数据准备
  • @PostConstruct,@PreDestroy 典型用法
  • 如何科学测算AI业务场景所需算力服务器?——以Qwen3 32B模型与海光K100为例
  • 从C++编程入手设计模式——策略设计模式
  • 长春做网站电话/关键词优化公司哪家强
  • 深圳龙岗区疫情分布/惠州seo报价
  • 做网站的报价方案/lpl赛区战绩
  • 如何做网站的的关键词/巧克力软文范例200字
  • 手机网站管理软件/青海seo关键词排名优化工具
  • 中天建设第四网站/关键词排名提高