首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

TreeSet 核心源码解析

——东野圭吾《白夜行》 0 前言 上篇我们分析了HashSet,它是组合了 HashMap 实现的,那TreeSet会是怎么实现的呢?没错!...和HashSet的实现一样,也是利用了Map保存的Key-Value键值对的Key不会重复的特点.诸多类似 add 这种方法实现比较简单,所以 TreeSet 自己简单组合实现下即可....借由不重复 key 特点,我们还可以用其对 key 进行去重,TreeSet 底层使用的是 TreeMap,TreeMap 在 put 的时候,如果发现 key 是相同的,会把 value 值进行覆盖,...所有不会产生重复的 key ,利用这一特性,使用 TreeSet 正好可以去重. 5 ceiling TreeSet中实现NavigableSet接口 [5088755_1583917527579_8BAB0869A6DD644D037E218F9EC51E46...基于TreeMap实现的,支持自然排序和自定义排序 不允许null值; 非线程安全,并发场景下可以使用Collections.synchronizedSortedSet(new TreeSet(...)

38400

关于 TreeSet 的使用

TreeSet是一个有序的集合,它支持自然排序和根据实现Comparator或Comparable接口进行排序。...下面我们通过案例来看一下TreeSet的使用. 1、使用TreeSet)对String类型的数据进行存储,存储顺序默认按字母升序排序。...运行效果 2、使用TreeSet对Intege类型数据进行存储,存储l顺序默认按数字从小到大排序。...这里需要实现Comparator和Comparable接口指定以什么属性进行排序,以及是升序还是降序排序。 下面以Comparator接口为例,实现Person对象按年龄升序排序。...运行效果 说明: 1)注意创建TreeSet)对象时,要指定Comparator接口的实现类作为参数 2)这里使用了pollFirst()方法,该方法比较特殊,可以返回元素,但是又把这个元素删除了,

59620

TreeSet源码解析

在这一篇中我们主要分享一下TreeSet集合的相关知识。在上一篇中我们介绍了HashSet集合的底层实现,并且发现HashSet底层是通过HashMap集合实现的。...那么顾名思义今天我们介绍的TreeSet集合,底层就是通过TreeMap集合实现的。那么废话不多说,我们直接看TreeSet的初始化代码。 初始化 ?...下面我们看一下TreeSet集合中的add方法的底层实现。 ? HashSet中的add方法的实现逻辑基本和HashSet中的实现逻辑一样。都是直接调用了底层Map的实现类。...既然TreeSet底层是通过TreeMap实现的,那么我们很容易可以总结出TreeSet具有以下的特性: 总结 保存在TreeSet集合中的元素,必须保证能够排序 TreeSet集合中不能保存null...元素,否则,虚拟机会抛出异常 TreeSet集合是有序的集合类,但是,不能保证元素的添加顺序与遍历顺序一致 TreeSet集合不是线程安全的集合类,在多线程环境使用时,要添加额外的同步代码,已保证线程安全

44120

Comparable和Comparator

出处comparable 接⼝实际上是出⾃ java.lang 包 它有⼀个 compareTo(Object obj) ⽅法进行排序comparator 接⼝实际上是出⾃ java.util 包它有⼀...(实体类实现)Comparator 是定制排序。(无法修改实体类时,直接在调用方创建)总结Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。...Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。...equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。...只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

36020

java集合框架-TreeSet

与HashSet不同,TreeSet中的元素是按照其自然顺序排序的,或者根据构造函数中提供的Comparator排序。...使用方法构造函数TreeSet提供了以下两个构造函数:TreeSet():创建一个默认的空TreeSet,其中的元素将按照自然顺序进行排序。TreeSet(Comparator comparator):创建一个空的TreeSet,其中的元素将按照指定的比较器进行排序。其中,Comparator是一个函数式接口,用于比较两个对象的大小关系。...如果我们不提供Comparator参数,TreeSet将使用元素自身的自然顺序进行排序,如果元素不实现Comparable接口,则会抛出ClassCastException异常。...其中:first()方法返回TreeSet中的第一个(最小的)元素。last()方法返回TreeSet中的最后一个(最大的)元素。

24410

HashSet、TreeSet的特点

HashSet和TreeSet都是Java中常见的集合框架,它们都实现了Set接口,并提供了存储无序、不可重复元素的功能。但是它们的实现方式、性能和适用场景有所不同。...TreeSet可以保证元素的唯一性,并且可以按照自然顺序或自定义比较器的方式对元素进行排序。TreeSet的添加、删除、查找操作的时间复杂度都是O(log n)。...TreeSet的缺点:不能存储null值;迭代TreeSet的顺序是按照元素的顺序输出的;比HashSet的性能差一些,因为需要维护红黑树的平衡;自定义比较器时需要额外的开销。...TreeSet set = new TreeSet(); // 添加元素 set.add(5); set.add(3); set.add(8);...根据具体的需求,我们可以选择使用HashSet或TreeSet

73120
领券