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

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

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

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

    TreeSet集合解析

    TreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序排序用的是二叉树原理。所以要理解这个类,必须先简单理解一下什么是二叉树。...二叉树原理简析  假如有这么一个集合TreeSet是[5,11,6,5,23,14]   用二叉树是怎么排序的呢? ?   二叉树遍历方法比较多,有兴趣自己百度看下吧。...TreeSet有这么一个构造方法:   TreeSet(Comparator comparator) 构造一个新的,空的树集,根据指定的比较器进行排序。   ...两种实现排序方式视情况而用。...()方法返回的结果进行存储 (2)比较器顺序(Comparator) 创建TreeSet的时候可以指定一个Comparator 如果传入了Comparator的子类对象,那么TreeSet就会按照比较器中的顺序排序

    77120

    希尔排序原理

    一、希尔排序与插入排序 1)希尔排序的概念 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort...2)插入排序实现 既然希尔排序是插入排序的优化,那么我们有必要先了解一下插入排序的过程,基本操作是将需要进行排序的元素插入到已排序区当中,这样每次插入都会使已排序区长度加一。...2、将待排序区的第一个元素向已排序区插入,将其与已排序区元素从后向前比较,将其插入到合适位置,已排序区元素个数+1。...3、然后待排序区重复2的步骤向已排序区从后往前比较,找到合适位置插入。 4、 继续将待排序区元素插入到已排序区,当待排序区元素为0时,这组数据就已经排序完成。...如何进行预排序呢?既然希尔排序是插入排序的优化,我们不妨以插排的思路对希尔预排序进行调整。

    15710

    TreeSet源码解析

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

    46020

    TreeSet 核心源码解析

    ,并根据其元素的自然顺序对其进行排序.插入set中的所有元素必须实现Comparable接口.此外,所有这些元素必须相互可比较:e1.compareTo(e2) 不得为集合中的任何元素e1和e2引发ClassCastException...,并根据其元素的自然顺序对其进行排序。...sorted set相同的元素,并使用相同的顺序 [5088755_1583915517346_AA5A390B7C1AE81B0402ABE6DDA95121] 构造一个新的空树集,根据指定的比较器排序...所有不会产生重复的 key ,利用这一特性,使用 TreeSet 正好可以去重. 5 ceiling TreeSet中实现NavigableSet接口 [5088755_1583917527579_8BAB0869A6DD644D037E218F9EC51E46...基于TreeMap实现的,支持自然排序和自定义排序 不允许null值; 非线程安全,并发场景下可以使用Collections.synchronizedSortedSet(new TreeSet(...)

    39800

    10.TreeSet、比较器

    1、概述:TreeSet可以对Set集合中的元素进行排序。... * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法  *  * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)...TreeSet是一个有序集合,TreeSet中的元素将按照升序排列(指排序的顺序),缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。...ts = new TreeSet(//new ComparatorByName());//传入了下边的ComparatorByName()就可以直接按姓名比较 person有了自然排序treeset...有了比较器,以比较器为主,比较器常用(结合下边看)//按字母大小自然排序public static void demo1() { TreeSet ts = new TreeSet(); ts.add

    987100

    走近HashSet,TreeSet与LinkedHashSet

    今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳...==Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。== 本文基于1.8jdk进行源码分析。...public TreeSet() { this(new TreeMap()); } //构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序...super E> comparator) { this(new TreeMap(comparator)); } //构造一个新的空 TreeSet,它根据指定比较器进行排序。...extends E> c) { this(); addAll(c); } //构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet

    51230

    TreeSet 核心源码解析

    3 构造方法 3.1 无参 构造一个新的空TreeSet,并根据其元素的自然顺序对其进行排序.插入set中的所有元素必须实现Comparable接口.此外,所有这些元素必须相互可比较:e1.compareTo...3.2 有参 构造一个包含指定集合中元素的新TreeSet,并根据其元素的自然顺序对其进行排序。 插入集合中的所有元素必须实现Comparable接口。...构造一个新的TreeSet,其中包含与指定的sorted set相同的元素,并使用相同的顺序 ? 构造一个新的空树集,根据指定的比较器排序。...所有不会产生重复的 key ,利用这一特性,使用 TreeSet 正好可以去重. 5 ceiling TreeSet中实现NavigableSet接口 ?...基于TreeMap实现的,支持自然排序和自定义排序 不允许null值; 非线程安全,并发场景下可以使用Collections.synchronizedSortedSet(new TreeSet(...)

    39741

    HashSet、TreeSet的特点

    TreeSet可以保证元素的唯一性,并且可以按照自然顺序或自定义比较器的方式对元素进行排序TreeSet的添加、删除、查找操作的时间复杂度都是O(log n)。...TreeSet的优点:可以自动排序;查找元素的时间复杂度为O(log n);添加、删除元素的时间复杂度为O(log n);内存占用比较少。...TreeSet的缺点:不能存储null值;迭代TreeSet的顺序是按照元素的顺序输出的;比HashSet的性能差一些,因为需要维护红黑树的平衡;自定义比较器时需要额外的开销。...HashSet是基于哈希表实现的,查找、添加、删除元素的时间复杂度都是O(1),内存占用比较少,但是不能保证元素的顺序;TreeSet是基于红黑树实现的,可以自动排序,并且查找、添加、删除元素的时间复杂度都是...根据具体的需求,我们可以选择使用HashSet或TreeSet

    83420

    java进阶|TreeSet源码分析

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

    46220

    理解插入排序,希尔排序,选择排序的算法原理

    本篇我们把剩下的几种效率一般的排序算法给介绍一下,分别是插入排序,希尔排序和选择排序。 插入排序(Insert Sort) 插入排序是一种简单直观的排序算法。...它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。...希尔排序 (Shell Sort) 希尔排序也称递减增量排序算法或,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。...它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。...,希尔排序,选择排序的算法原理和思想,尽管这些排序算法并不是最优的选择,并不适合大数据量集下的排序,但是了解这些算法的基本思想还是很有必要的。

    1.1K10
    领券