首页
学习
活动
专区
工具
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(...)

38500

TreeSet源码解析

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

44120

java进阶|TreeSet源码分析

public TreeSet() { this(new TreeMap()); } 每次我们创建一个TreeSet集合时,本质上就是new出了一个TreeMap(...)键值对集合,但是写到这里我还没有分析TreeMap的源码,但是这不影响我的分析,因为我已经分析完TreeSet集合的源码,整个的过程中没有阻塞性,所以分析TreeSet集合继续了。...接下来分析一下TreeSet集合中的first()方法,也就是获取TreeSet集合中第一个元素的方法,这个方法见到的很少,所以这里就分析一下。...我既然分享了如何获取TreeSet集合的第一个元素的方法,自然会去分析一下如何获取TreeSet集合获取最后一个元素pollLast()方法,所以继续分析一下了。...到这里自己想要分析的TreeSet集合就结束了

44220

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

TreeSet 核心源码解析

0 前言 上篇我们分析了HashSet,它是组合了 HashMap 实现的,那TreeSet会是怎么实现的呢?没错!组合 TreeMap 实现. 1 继承体系 ?...3.2 有参 构造一个包含指定集合中元素的新TreeSet,并根据其元素的自然顺序对其进行排序。 插入集合中的所有元素必须实现Comparable接口。...构造一个新的TreeSet,其中包含与指定的sorted set相同的元素,并使用相同的顺序 ? 构造一个新的空树集,根据指定的比较器排序。...和HashSet的实现一样,也是利用了Map保存的Key-Value键值对的Key不会重复的特点.诸多类似 add 这种方法实现比较简单,所以 TreeSet 自己简单组合实现下即可....所有不会产生重复的 key ,利用这一特性,使用 TreeSet 正好可以去重. 5 ceiling TreeSet中实现NavigableSet接口 ?

39141

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

TreeSet 的使用以及其他知识点 ---- 文章目录 一、TreeSet 概述 二、TreeSet 的使用 1、构造方法 2、常用方法 三、其他知识点 1、关于 HashSet、LinkedHashSet...和 TreeSet 的区别 2、关于 红黑树的特点 3、关于 TreeSet 和 TreeMap 的区别 ---- 一、TreeSet 概述 TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序...TreeMap 的底层是通过红黑树实现的,所以 TreeSet 底层也是通过红黑树实现的。TreeSet 最主要的特点就是对元素进行了排序。...super E> comparator) 构造TreeSet,根据指定的比较器进行排序 public TreeSet(Collection c) 构造一个包含指定集合中的元素的TreeSet,根据其元素的自然排序进行比较 public TreeSet(SortedSet s) 构造TreeSet,并使用与指定排序集相同的顺序

36510
领券