Java集合:关于 TreeSet 的内容盘点

TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置;
~
本篇内容包括:TreeSet 概述、TreeSet 的使用以及其他知识点


文章目录

    • 一、TreeSet 概述
    • 二、TreeSet 的使用
        • 1、构造方法
        • 2、常用方法
    • 三、其他知识点
        • 1、关于 HashSet、LinkedHashSet 和 TreeSet 的区别
        • 2、关于 红黑树的特点
        • 3、关于 TreeSet 和 TreeMap 的区别


一、TreeSet 概述

TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置;

Integer 和 String 对象都可以进行默认的 TreeSet 排序,而自定义类的对象是不可以的,自己定义的类必须实现 Comparable 接口,并且覆写相应的 compareTo() 函数,才可以正常使用;在覆写 compare() 函数时,要返回相应的值才能使 TreeSet 按照一定的规则来排序

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数

TreeSet 的作用是保存无重复的数据,不过还对这些数据进行了排序。TreeMap 的底层是通过红黑树实现的,所以 TreeSet 底层也是通过红黑树实现的。TreeSet 最主要的特点就是对元素进行了排序。其特点如下:

  • TreeSet 是基于 TreeMap 的 NavigableSet 实现;
  • TreeSet 的元素存储在 TreeMap 中的 key 中,TreeMap 的 value 是一个常量对象;
  • 非线程安全;
  • java8 新增分割器 spliterator() 方法

二、TreeSet 的使用

1、构造方法

方法名方法说明方法名方法说明
public TreeSet()无参构造方法,完成 map 的创建;public TreeSet(Comparator<? super E> comparator)构造TreeSet,根据指定的比较器进行排序
public TreeSet(Collection<? extends E> c)构造一个包含指定集合中的元素的TreeSet,根据其元素的自然排序进行比较public TreeSet(SortedSet<E> s)构造TreeSet,并使用与指定排序集相同的顺序

2、常用方法

方法名方法说明方法名方法说明
boolean add(E e)添加一个元素,如果该元素已经存在,则返回true,如果不存在,则返回falseboolean addAll(Collection<? extends E> c)添加一个包含指定元素的集合
boolean remove(Object o)hashSet的迭代器void clear()获得大小
NavigableSet<E> headSet(E toElement, boolean inclusive)返回子 SetNavigableSet<E> tailSet(E fromElement, boolean inclusive)返回Set的尾部,范围是:从fromElement到结尾。
E first()返回Set的第一个元素E last()返回Set的最后一个元素
E lower(E e)返回Set中小于e的最大元素E floor(E e)返回Set中小于/等于e的最大元素
E ceiling(E e)返回Set中大于/等于e的最小元素E higher(E e)返回Set中大于e的最小元素
E pollFirst()获取第一个元素,并将该元素从TreeMap中删除E pollLast()获取最后一个元素,并将该元素从TreeMap中删除
void writeObject(java.io.ObjectOutputStream s)将TreeSet的“比较器、容量,所有的元素值”都写入到输出流中void readObject(java.io.ObjectInputStreams)从输入流中读取TreeSet的“比较器、容量,所有的元素值”

三、其他知识点

1、关于 HashSet、LinkedHashSet 和 TreeSet 的区别

  • HashSet 是 Set 接口的主要实现类 ,HashSet 的底层是 HashMap,线程不安全的,可以存储 null 值;
  • LinkedHashSet 是 HashSet 的子类,能够按照添加的顺序遍历;
  • TreeSet 底层使用红黑树,能够按照添加元素的顺序进行遍历,排序的方式可以自定义。

2、关于 红黑树的特点

  • 性质 1:每个节点要么是红色,要么是黑色。
  • 性质 2:根节点永远是黑色的。
  • 性质 3:所有的叶节点都是空节点(即 null),并且是黑色的。
  • 性质 4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续的红色节点)
  • 性质 5:从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点。

3、关于 TreeSet 和 TreeMap 的区别

TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类。虽然 TreeMap 和TreeSet 实现的接口规范不同,但 TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样),因此二者的实现方式完全一样。而 TreeMap 的实现就是红黑树算法

不同点:

  • 最主要的区别就是 TreeSet 和 TreeMap 分别实现 Set 和 Map 接口
  • TreeSet 只存储一个对象,而 TreeMap存 储两个对象 Key 和 Value(仅仅key对象有序)
  • TreeSet 中不能有重复对象,而 TreeMap 中可以存在
  • TreeMap 的底层采用红黑树的实现,完成数据有序的插入,排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python求素数

口求100内的素数 -个数能被从2开始到自己的平发根的正整数整数整除,就是合数 import math n100 for X in range(2, n): for i in range(2, math.ceil(math.sqrt(x))): if x %i 0: break else: print(x)口求100内的素数 合数一定可以分解为几个质数的乘积 import math n100 pri…

svn钩子脚本

REP0S"$1" REV"$2"export LANGen_US.UTF-8 LOGPATH"/app/log" [ !-d ${LOGPATH}] && mkdir $[LOGPATH) -p #update content from svn↓14 SVN/usr/bin/svn↓ SVN update --username test --password test /data/ if[ $? -eq ] then /us…

shell判断字符串是否为数字

#1.组合语法判断1: [ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g"] &&\echo”两个参数都必须为数字”&& exit 1#2.组合语法判断2:[ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g&…

MySQL:DQL 数据查询语句盘点

本篇内容包括&#xff1a;DQL 的简介、SELECT 语句、WHERE 条件语句、JOIN 连接查询(多表查询)和分组、过滤、排序、分页、子查询的使用。 一、DQL 简介 DQL&#xff08;Data QueryLanguage&#xff09;语句&#xff0c;即数据查询语句 常用的语句关键字有&#xff1a;SELECT…

MySQL:DML 数据操作语句盘点

本篇内容包括&#xff1a;DML 的简介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 简介 DML&#xff08;Data Manipulation Language&#xff09;语句&#xff0c;即数据操作语句&#xff0c;用于操作数据库对象中所包含的数据。 常用关键字包…

MySQL:DDL 数据定义语句盘点

本篇内容包括&#xff1a;DDL 的简介、SHOW 查看语句、CREATE 创建语句、ALTER 修改语句以及 DROP 删除语句的使用。 一、DDL 简介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即数据定义语句&#xff0c;功能就是定义数据库DATabase、表table、索引ind…

MySQL:DCL 数据控制语句盘点

本篇内容包括:DCL 简介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 简介 DCL&#xff08;Data Control Language&#xff09;语句&#xff0c;即数据控制语句&#xff0c;用于设置或更改数据库用户或角色权限的语句 常用关键字包括&#xff1a;…

oracle迁移父子数据

现有需求如下&#xff0c;业务组织单元表中id字段数据在另外一个系统全部重复&#xff0c;但需要将此业务单元组织导入另一系统 业务组织单元表Isc_Specialorg_Unit 表中存在ID字段为子节点数据&#xff0c;parent_id为父节点数据&#xff0c;orgpath为组织路径 现在做如下操…

批量更新数据库数据

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是数据库里面非常重要的一类文件,它记录了当前实例连接的数据库的结构和行为&#xff0c;并维护数据库的一致性。 初始化参数文件中描述其位置&#xff0c;很小的:二进制文件,一般不要超过100mmount读open一直在用 控制文件只能连接一个database丢失要恢复 …

oracle表空间

概念 表空间和数据文件 ●表空间是逻辑存储概念&#xff0c;一个表空间是一个或多个数据文件的逻辑集合 ●存储对象(表、索引)逻辑的存储在表空间上&#xff0c;而存储对象的数据物理的存放在数据文件上 ●数据库至少需要一个叫做system的表空间&#xff0c;也就是系统表空间 ●…

oracle日志

日志分类 redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式…

MySQL:分库分表知识点盘点

本篇内容包括&#xff1a;数据库瓶颈、分库分表以及分库分表相关问题 一、数据库瓶颈 不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三种方式&#xff1a; ●8i:SGA的总大小由所有内存组件大小之和决定&#xff0c;不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为&#xff0c;所以叫做SGA的静态管理。 ●9i&#xff…

MySQL:日志知识点盘点

本篇内容包括&#xff1a;binlog&#xff08;二进制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二进制日志&#xff09; binlog 用于记录数据库执行的写入性操作(不包括查询)信息&#xff0c;以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志&…

ROWNUM的使用

一个伪列看起来像是一个表中的列&#xff0c;但实际上并不保存在表中。你可以查询&#xff0c; 但是不能插入&#xff0c;修改和删除其中的值。一个伪列也类似于一个没有参数的函 数。但是在典型情况下&#xff0c;在结果集中可以为每一行返回相同的值&#xff0c;而伪列通 常为…

MySQL:主从相关知识点盘点

本篇内容包括&#xff1a;MySQL 主从复制简介、主从复制的原理以及主从搭建 一、MySQL 主从复制简介 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用**「主从复制」**。 比如&#xff1a;在复杂的业务系统中&#x…

oracle导出expdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵&#xff0c;作用是为了将数据库中的逻辑对象&#xff0c;比如表、用户、全库、表空间进 行导入&#xff0c;导出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用户名,job_name 表示导出的作…

oracle导入impdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵&#xff0c;作用是为了将数据库中的逻辑对象&#xff0c;比如表、用户、全库、表空间进 行导入&#xff0c;导出REMAP_DATAFILE 该选项用于将源数据文件名转变为目标数据文件名, 在不同平台之间搬移表空间时可能需…

oracle高水位线

ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个Block里可以包含多个row. 1.2 区:…