首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TreeMap源码解析

现在我们已经知道了有关红黑树的所有知识,下面我们分析一下TreeMap的底层源码,看TreeMap底层是怎么实现红黑树的逻辑的。我们还是和其它集合一样还是先看TreeMap的初始化。 ? ?...上面是TreeMap的无参构造函数,我们发现当我们通过参构造函数创建TreeMap对象时,并不会执行底层树结构的初始化,而只是将comparator设置为空。...那么通过我们以往分析其它集合时总结的规律,TreeMap的初始化一定是在第一次调用put方法时执行的。下面我们将重点看一下TreeMap中的put方法。 ? ? ? ? ?...总结 在TreeMap中不允许用null做为key保存到TreeMap集合中 我们在分析源码时并没有发现同步关键字synchronized,这就说明TreeMap也不是一个线程安全的集合类 我们在分析源码时知道...TreeMap每次都添加元素时都会进行key的比较,所以我们在使用TreeMap集合是必须保证存储在TreeMap中的元素是可以比较的,否则虚拟机会直接抛出一场。

42720
您找到你想要的搜索结果了吗?
是的
没有找到

TreeMap 源码解析

另一方面,由于 TreeMap 基于红黑树实现,这为 TreeMap 保持键的有序性打下了基础。总的来说,TreeMap 的核心是红黑树,其很多方法也是对红黑树增删查基础操作的一个包装。...以上就是 TreeMap 的继承体系,描述起来有点乱,不如看图了: image.png 上图就是 TreeMap 的继承体系图,比较直观。...如简介一节所说,只要弄懂了红黑树原理,TreeMap 就没什么秘密了。 查找 TreeMap基于红黑树实现,而红黑树是一种自平衡二叉查找树,所以 TreeMap 的查找操作流程和二叉查找树一致。...TreeMap 查找和此类似,只不过在 TreeMap 中,节点(Entry)存储的是键值对。在查找过程中,比较的是键的大小,返回的是值,如果没找到,则返回null。...return ((TreeMap<E,?

41031

JAVA集合:TreeMap

一、TreeMap 概述 Map 在 Java 里面分为两种:HashMap 和 TreeMap,区别就是 TreeMap 有序,HashMap 无序。...---- 三、TreeMap 的使用 1、构造方法 方法名 方法说明 方法名 方法说明 public TreeMap() 创建一个空TreeMap,keys按照自然排序 public TreeMap(Comparator...comparator) 创建一个空TreeMap,按照指定的comparator排序 public TreeMap(Map m) 由给定的map创建一个TreeMap,keys按照自然排序 public...TreeMap(SortedMap m) 由给定的有序map创建TreeMap,keys按照原顺序排序 2、常用方法-增添元素 V put(K key, V value):将指定映射放入该TreeMap...():返回该TreeMap的第一个(最小的)映射 K firstKey():返回该TreeMap的第一个(最小的)映射的key Map.Entry lastEntry():返回该TreeMap

33910

java集合框架-TreeMap

TreeMap 的用法创建 TreeMap 对象在 Java 中,我们可以使用以下两种方式来创建 TreeMap 对象:TreeMap treeMap = new TreeMap();...// 创建一个空的 TreeMap 对象TreeMap treeMap = new TreeMap(Comparator<?...存储键值对在 TreeMap 中,我们可以使用 put() 方法来存储键值对,例如:treeMap.put(key, value);这个方法将把键值对 key:value 存储到 TreeMap 中。...获取键值对在 TreeMap 中,我们可以使用 get() 方法来获取指定键对应的值,例如:V value = treeMap.get(key);这个方法将返回键 key 对应的值,如果 TreeMap...遍历 TreeMapTreeMap 中,我们可以使用 entrySet() 方法来获取 TreeMap 中的所有键值对,然后使用 for-each 循环来遍历这些键值对,例如:for (Map.Entry

22931

Java TreeMap 源码解析

这篇文章开始介绍Map系列另一个比较重要的类TreeMap。...大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较多;二是相对于HashMap来说,TreeMap所用到的数据结构更为复杂...可以看到,相比HashMap来说,TreeMap多继承了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同: HashMap的key是无序的,TreeMap的key...由于红黑树的操作我这里不说了,所以这里基本上也就没什么源码可以讲了,因为这里面重要的算法都是From CLR,这里的CLR是指Cormen, Leiserson, Rivest,他们是算法导论的作者,也就是说TreeMap...总结 到目前为止,TreeMap与HashMap的的实现算是都介绍完了,可以看到它们实现的不同,决定了它们应用场景的不同: TreeMap的key是有序的,增删改查操作的时间复杂度为O(log(n)),

46910

Hashtable、HashMap、TreeMap辨析

Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型。...元素特性 HashTable中的key、value都不能为null;HashMap中的key、value可以为null,很显然只 能有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap...TreeMap是利用红黑树来实现的(树中的每个节点的值,都会大于或等于它的左子树种的所有节点的值,并且小于或等于它的右子树中的所有节点的值),实现了SortMap接口,能够对保存的记录根据键进行排序。...所以一般需要排序的情况下是选择TreeMap来进行,默认为升序排序方式(深度优先搜索),可自定义实现Comparator接口实现排序方式。

36500

Java TreeMap 源码解析

这篇文章开始介绍Map系列另一个比较重要的类TreeMap。...大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较多;二是相对于HashMap来说,TreeMap所用到的数据结构更为复杂...可以看到,相比HashMap来说,TreeMap多继承了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同: HashMap的key是无序的,TreeMap的key...由于红黑树的操作我这里不说了,所以这里基本上也就没什么源码可以讲了,因为这里面重要的算法都是From CLR,这里的CLR是指Cormen, Leiserson, Rivest,他们是算法导论的作者,也就是说TreeMap...总结 到目前为止,TreeMap与HashMap的的实现算是都介绍完了,可以看到它们实现的不同,决定了它们应用场景的不同: TreeMap的key是有序的,增删改查操作的时间复杂度为O(log(n)),

36410

从源码解析TreeMap

本篇将要介绍的一个集合是树集键值对(TreeMap),它能够对数据按照键值有序的存储。      在介绍TreeMap之前,我们来了解一种数据结构:排序二叉树。...在实现我们的TreeMap中,使用的是红黑树(一种优化了的二叉排序树)。...一、TreeMap的超接口      TreeMap主要继承了类AbstractMap(一个对Map接口的实现类)和 NavigableMap(主要提供了对TreeMap的一些高级操作例如:返回第一个键或者返回小于某个键的视图等...super K> comparator; public TreeMap() {comparator = null;} public TreeMap(Comparator...第二种构造函数就是从外部传入指定的比较器,指定TreeMap内部在对键进行比较的时候使用我们从外部传入的比较器。

58380
领券