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

【集合系列】自动对数据进行排序TreeMap

摘要 Map 接口的实现类 LinkedHashMap,LinkedHashMap 存储的元素是有序的,可以保持元素的插入顺序,但不能对元素进行自动排序。...在某些场景,如果在数据的存储过程中,能够自动对数据进行排序,将会极大提高编程效率。而 Map 接口有一个重要的实现类 TreeMapTreeMap 可以实现存储元素的自动排序。...简介 Java TreeMap 实现了 SortedMap 接口,也就是说会按照 key 的大小顺序对 Map 中的元素进行排序,key 大小的评判可以通过其本身的自然顺序(natural ordering...,key为升序 System.out.println("默认 排序结果:" + initMap.toString()); //自定义排序,在TreeMap初始化阶段传入Comparator...TreeMap 默认是按键值的升序排序,如果需要自定义排序,可以通过new Comparator构造参数,重写compare方法,进行自定义比较。

1.3K30

java中的排序--排序容器_TreeSet与TreeMap

TreeSet数据排序两种方式: 注意:TreeSet是在添加数据时进行排序,数据更改不会影响原来的顺序,因此不能修改类中数据,否则可能重复。...1)、若选用无参的new TreeSet()构造器,需要元素本身可以排序方能使用,也即实体类实现java.lang.Comparable接口重写compareTo接口。  ...super E> comparator)构造器,需要提供额外的排序业务类(匿名内部类的方式)实现java.util.Comparator接口,重写compare方法。    ...super E> comparator)构造器--提供额外的业务排序类(匿名内部类的方式) package top.wfaceboss.caseSort; import java.util.TreeSet...重写compareTo接口 ,因此需要提供额外的业务排序类,否则会出错 TreeSet persons = new TreeSet(new java.util.Comparator

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

Java TreeMap 源码解析

可以看到,相比HashMap来说,TreeMap多继承了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同: HashMap的key是无序的,TreeMap的key...这里引申下关于Comparable与Comparator的区别(参考这里): Comparable一般表示类的自然序,比如定义一个Student类,学号为默认排序 Comparator一般表示类在某种场合下的特殊分类...,需要定制化排序。...比如现在想按照Student类的age来排序 插入SortedMap中的key的类类都必须继承Comparable类(或指定一个comparator),这样才能确定如何比较(通过k1.compareTo...为了保证红黑树平衡,在必要时会进行旋转 HashMap的key是无序的,增删改查操作的时间复杂度为O(1),为了做到动态扩容,在必要时会进行resize。

47110

java集合框架-TreeMap

Java 中的 TreeMap 是一种基于红黑树实现的有序映射表,它实现了 SortedMap 接口,并在此基础上提供了一些额外的操作方法。...TreeMap 的用法创建 TreeMap 对象在 Java 中,我们可以使用以下两种方式来创建 TreeMap 对象:TreeMap treeMap = new TreeMap();...super K> comparator); // 创建一个带有指定比较器的 TreeMap 对象在第一种方式中,我们创建了一个空的 TreeMap 对象,该对象将使用键的自然顺序进行排序。...在第二种方式中,我们可以通过指定一个比较器来控制 TreeMap 中键的排序顺序。如果我们不指定比较器,则 TreeMap 将使用键的自然顺序进行排序。...处理 key 和 value}这个方法将遍历 TreeMap 中的所有键值对,并对它们进行处理。

23131

Java】基础篇- TreeMap

可能大家有的人会问道,我知道 Java 中有 HashMap ,我会用它就行了啊,我还学这个 TreeMap 做啥,其实 HashMap 有个很重要的问题,就是不能排序,或者说它的键值对不能按照特定的顺序排序...所以就引入了我们今天的 TreeMap。(记住 TreeMap 是按照键来进行排序的)而 TreeMap 的实现基础就是我们之前的上一篇文章提到的 排序二叉树,没有看的童鞋请移步:。...public TreeMap() { comparator = null; } 该构造函数使用默认的排序算法,要求 键 实现 Comparabe 接口,TreeMap 内部进行比较时...: Item cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1294)...at java.util.TreeMap.put(TreeMap.java:538) at MapTest.main(MapTest.java:9) ---- 2.

66030

JavaTreeMap详解

该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 2.是继承了AbstractMap,也是以key-value集合存储。...实现了java.io.Serializable序列化接口。另外,TreeMap是非同步的。 构造方法 TreeMap() 使用键的自然顺序构造一个新的、空的树映射。...TreeMap(Comparator comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序TreeMap(Map m) 构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序TreeMap(SortedMap m) 构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射。 常用方法 size() 返回此映射中的键-值映射关系数。

3.1K21

Java TreeMap 源码解析

可以看到,相比HashMap来说,TreeMap多继承了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同: HashMap的key是无序的,TreeMap的key...这里引申下关于Comparable与Comparator的区别(参考这里): Comparable一般表示类的自然序,比如定义一个Student类,学号为默认排序 Comparator一般表示类在某种场合下的特殊分类...,需要定制化排序。...比如现在想按照Student类的age来排序 插入SortedMap中的key的类类都必须继承Comparable类(或指定一个comparator),这样才能确定如何比较(通过k1.compareTo...为了保证红黑树平衡,在必要时会进行旋转 HashMap的key是无序的,增删改查操作的时间复杂度为O(1),为了做到动态扩容,在必要时会进行resize。

36710

Java集合--TreeMap完全解析

与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序。...其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序; 不同于HashMap的哈希映射,TreeMap底层实现了树形结构,至于具体形态,你可以简单的理解为一颗倒过来的树---根在上--...super K> comparator(); 该方法决定了TreeMap体系的走向,有了比较器,就可以对插入的元素进行排序了; public interface SortedMap extends...实现时,自然获取以上的功能; TreeMap具有如下特点: 不允许出现重复的key; 可以插入null键,null值; 可以对元素进行排序; 无序集合(插入和遍历顺序不一致); 4.2 TreeMap基本操作...而早在第一小节,笔者就说过TreeMap是一个可以对元素进行排序的集合,那么究竟怎么排序呢?

4K40

Java集合深度解析之TreeMap

红黑树简介 TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率...TreeMap源码剖析 一、存储结构 TreeMap排序是基于对key的排序实现的,它的每一个Entry代表红黑树的一个节点,Entry的数据结构如下: static final class Entry...// 红黑树是以key来进行排序的,所以这里以key来进行查找。 if (cpr !...删除操作及对应TreeMap的deleteEntry方法,deleteEntry方法同样也只需按照二叉排序树的操作步骤实现即可,删除指定节点后,再对树进行调整即可。...几点总结 本文对TreeMap的分析较前几篇文章有些浅尝辄止,TreeMap用的没有HashMap那么多 1、TreeMap是根据key进行排序的,它的排序和定位需要依赖比较器或覆写Comparable

77450

Java8的TreeMap源码解析

线程不安全,但是因为需要排序进行key的compareTo方法,所以key是不能null中,value是可以的。...首先庖丁解牛,类似于如何把大象装入冰箱,分三步走: 以排序二叉树的方式新增节点 因为红黑树首先本身就是一个排序二叉树 标记它为红色 如果设为黑色,就会导致根到叶的路径上有一条路上,多一个额外的黑节点...,打破性质 5,这个很难调整 但设为红色节点后,可能会导致出现两个连续红色节点的冲突,那么可以通过 颜色调换(color flips)和树旋转 调整 之后再要进行什么操作就取决于其他临近节点的颜色...红色的祖节点G可能是根,破坏性质2 也可能祖节点G的父节点是红色的,破坏性质4 为了解决这个问题,在祖节点G递归进行情境1.

32110

TreeMap数据结构之排序二叉树

一.排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。...典型地,JDK 提供的集合类 TreeMap 本身就是一个红黑树的实现。 红黑树在原有的排序二叉树增加了如下几个要求: 性质 1:每个节点要么是红色,要么是黑色。...五.红黑树插入节点后的修复 插入操作按如下步骤进行: 以排序二叉树的方法插入新节点,并将它设为红色。...在这种情形下,我们进行一次左旋转对新节点和其父节点进行,接着按情形 5 处理以前的父节点 P( 也就是把 P 当成新插入的节点即可)。...六.红黑树删除节点后的修复 与添加节点之后的修复类似的是,TreeMap 删除节点之后也需要进行类似的修复操作,通过这种修复 来保证该排序二叉树依然满足红黑树特征。

43230

JavaTreemap和 Treeset的使用

前言 首先要注意的是,本文章不涉及到红黑树的具体实现,也就是说不会逐行分析TreeMap和TreeSet的源码实现,因为红黑树看了也会忘的… 所以本文只是记录红黑树的一些基础介绍,以及TreeMap和...TreeMap TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)实现。...该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。...TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。...因为他是基于TreeMap实现的,所以其实也是基于红黑树,其基本操作(add、remove 和 contains等)都是O(logn)的时间复杂度.

1.2K10

Java集合,TreeMap底层实现和原理

如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。这点会在接下来的代码中做说明,如果指定了比较器则按照比较器来进行排序。...() { comparator = null; } //构造方法,提供比较器,用指定比较器排序 public TreeMap(Comparator<?...自然排序TreeMap的所有key必须实现Comparable接口,所有的key都是同一个类的对象 定制排序:创建TreeMap对象传入了一个Comparator对象,该对象负责对TreeMap中所有的...key进行排序,采用定制排序不要求Map的key实现Comparable接口。...上面的情形只是针对删除的节点是左孩子的情况,进行的分析,被删除的节点也可能是右分支。情况完全相同只不过左右顺序发生了颠倒,不再进行复述。 至此TreeMap中实现的最重要已经说完了。

1.2K10

深入理解HashMap和TreeMap的区别

简介 HashMap和TreeMap是Map家族中非常常用的两个类,两个类在使用上和本质上有什么区别呢?本文将从这两个方面进行深入的探讨,希望能揭露其本质。...NavigableMap是SortedMap的一种,实现了对Map中key的排序。 这样两者的第一个区别就出来了,TreeMap排序的而HashMap不是。...而loadFactor就指定了什么时候需要进行扩容操作。默认的loadFactor是0.75。...在java 8之前,HashMap解决hashcode冲突的方法是采用链表的形式,为了提升效率,java 8将其转成了TreeNode。什么时候会发送这个转换呢?...HashMap如果出现hash冲突的话,效率会变差,不过在java 8进行TreeNode转换之后,效率有很大的提升。 TreeMap在添加和删除节点的时候会进行排序,会对性能有所影响。

62010
领券