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<
TreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。所以要理解这个类,必须先简单理解一下什么是二叉树。...二叉树原理简析 假如有这么一个集合TreeSet是[5,11,6,5,23,14] 用二叉树是怎么排序的呢? ? 二叉树遍历方法比较多,有兴趣自己百度看下吧。...TreeSet有这么一个构造方法: TreeSet(Comparator comparator) 构造一个新的,空的树集,根据指定的比较器进行排序。 ...两种实现排序方式视情况而用。...()方法返回的结果进行存储 (2)比较器顺序(Comparator) 创建TreeSet的时候可以指定一个Comparator 如果传入了Comparator的子类对象,那么TreeSet就会按照比较器中的顺序排序
参考链接: Java TreeSet TreeSet() 构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。 ...TreeSet(Collection extendsE> c) 构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。 ...TreeSet(Comparator superE> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序。 ...TreeSet(SortedSet s) 构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。 ...TreeSet publicTreeSet(Comparator superE> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序。
TreeSet存储元素自然排序和唯一的代码及图解 示例代码如下: 1 package cn.itcast_05; 2 3 import java.util.TreeSet; 4 5 /*...6 * TreeSet:能够对元素按照某种规则进行排序。...7 * 排序有两种方式(具体那种方式取决于使用TreeSet的构造方法) 8 * A:自然排序 9 * B:比较器排序 10...* 11 * TreeSet集合的特点:排序和唯一 12 * 13 * 通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。...的无参构造:自然顺序进行排序 19 TreeSet ts = new TreeSet(); 20 21 // 创建元素并添加进集合
,并根据其元素的自然顺序对其进行排序.插入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(...)
TreeSet是一个有序的集合,它支持自然排序和根据实现Comparator或Comparable接口进行排序。...下面我们通过案例来看一下TreeSet的使用. 1、使用TreeSet)对String类型的数据进行存储,存储顺序默认按字母升序排序。...运行效果 2、使用TreeSet对Intege类型数据进行存储,存储l顺序默认按数字从小到大排序。...小伙伴可以参考floor()方法进行练习呦~ 3、当TreeSet中添加自定义类的对象时,是如何进行排序的呢?...2)定义PersonComparato类,实现年龄的升序排序 3、在测试类的主方法中,定义五个Person:类的对象,并添加到TreeSet中,然后显示集合所有元素。
/*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo...("java01"); 10 ts1.add("java08"); 11 ts1.add("java04"); 12 //输出对象的值,是经过排序的数据...13 System.out.println(ts1); 14 //定义TreeSet对象,并赋值自定义的对象 15 TreeSet ts2=new TreeSet...ts2.add(new Person("ls",13)); 19 ts2.add(new Person("ls",11)); 20 //输出对象,也是经过排序的数据...2 * treeSet当元素不具备比较性,或者比较性不是所需要的时候, 3 * 可以使treeSet集合具有比较性。
TreeSet:可以对Set集合中的元素排序,默认按照ascii表排序,二叉树结构 左边叉是小的,右边叉是大的 存储自定义对象 定义一个类Student实现Comparable类,使自定义类具备比较性...对象的add()方法,参数:Student对象 遍历集合 import java.util.TreeSet; public class TreeSetDemo { /** *...@param args */ public static void main(String[] args) { TreeSet treeset=new...TreeSet(); treeset.add(new Student("taoshihan1",30)); treeset.add(new Student...("taoshihan2",20)); treeset.add(new Student("taoshihan3",40)); for(Student student:treeset
在这一篇中我们主要分享一下TreeSet集合的相关知识。在上一篇中我们介绍了HashSet集合的底层实现,并且发现HashSet底层是通过HashMap集合实现的。...那么顾名思义今天我们介绍的TreeSet集合,底层就是通过TreeMap集合实现的。那么废话不多说,我们直接看TreeSet的初始化代码。 初始化 ?...下面我们看一下TreeSet集合中的add方法的底层实现。 ? HashSet中的add方法的实现逻辑基本和HashSet中的实现逻辑一样。都是直接调用了底层Map的实现类。...既然TreeSet底层是通过TreeMap实现的,那么我们很容易可以总结出TreeSet具有以下的特性: 总结 保存在TreeSet集合中的元素,必须保证能够排序 TreeSet集合中不能保存null...元素,否则,虚拟机会抛出异常 TreeSet集合是有序的集合类,但是,不能保证元素的添加顺序与遍历顺序一致 TreeSet集合不是线程安全的集合类,在多线程环境使用时,要添加额外的同步代码,已保证线程安全
之前我们看了HashMap和TreeMap,今天我们看看他们的小弟:HashSet和TreeMap
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
想要实现Set集合有序,被排序的对象需要实现Compareable接口 定义类Person public class Person implements Comparable{ int num; int...Math.abs(diff); return 0; } } 注意:如果加入null会有nullpointException空指针异常 因为每加入一个对象自动调用compareTo方法,使用TreeSet...不能加入空指针 import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet...person2 = new Person(2, 10, "阿财"); Person person3 = new Person(3, 27, "小刘"); Set aSet = new TreeSet
介绍TreeSet是Java集合框架中实现了SortedSet接口的有序集合。它是基于红黑树(Red-Black Tree)实现的,能够自动进行元素的排序,且具有很高的查找效率。...与HashSet不同,TreeSet中的元素是按照其自然顺序排序的,或者根据构造函数中提供的Comparator排序。...由于TreeSet是有序的集合,所以它适用于那些需要对集合进行排序的场景,例如需要按照字母顺序或者数字大小进行排序的场景。...使用方法构造函数TreeSet提供了以下两个构造函数:TreeSet():创建一个默认的空TreeSet,其中的元素将按照自然顺序进行排序。TreeSet(Comparator set = new TreeSet();set.add("apple");set.add("banana");set.add("
public TreeSet() { this(new TreeMap()); } 每次我们创建一个TreeSet集合时,本质上就是new出了一个TreeMap(...)键值对集合,但是写到这里我还没有分析TreeMap的源码,但是这不影响我的分析,因为我已经分析完TreeSet集合的源码,整个的过程中没有阻塞性,所以分析TreeSet集合继续了。...接下来分析一下TreeSet集合中的first()方法,也就是获取TreeSet集合中第一个元素的方法,这个方法见到的很少,所以这里就分析一下。...我既然分享了如何获取TreeSet集合的第一个元素的方法,自然会去分析一下如何获取TreeSet集合获取最后一个元素pollLast()方法,所以继续分析一下了。...到这里自己想要分析的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(...)
TreeSet可以保证元素的唯一性,并且可以按照自然顺序或自定义比较器的方式对元素进行排序。TreeSet的添加、删除、查找操作的时间复杂度都是O(log n)。...TreeSet的优点:可以自动排序;查找元素的时间复杂度为O(log n);添加、删除元素的时间复杂度为O(log n);内存占用比较少。...TreeSet的缺点:不能存储null值;迭代TreeSet的顺序是按照元素的顺序输出的;比HashSet的性能差一些,因为需要维护红黑树的平衡;自定义比较器时需要额外的开销。...HashSet是基于哈希表实现的,查找、添加、删除元素的时间复杂度都是O(1),内存占用比较少,但是不能保证元素的顺序;TreeSet是基于红黑树实现的,可以自动排序,并且查找、添加、删除元素的时间复杂度都是...根据具体的需求,我们可以选择使用HashSet或TreeSet。
==Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义。== 本文基于1.8jdk进行源码分析。...TreeSet 与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的。...public TreeSet() { this(new TreeMap()); } //构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序...super E> comparator) { this(new TreeMap(comparator)); } //构造一个新的空 TreeSet,它根据指定比较器进行排序。...extends E> c) { this(); addAll(c); } //构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。
TreeSet 是 Set 集合的红黑树实现,但其内部并没有具体的逻辑,而是直接使用 TreeMap 对象实现。我们先来看看 TreeSet 的定义。...可以看到 TreeSet 实现了 NavigableSet 接口,而 NavigableSet 接口又继承了 接口。...image.png 原理 我们还是通过类成员变量、构造方法、核心方法来解析 TreeSet 的实现。...TreeSet(NavigableMap m) { this.m = m; } // 指定TreeMap的比较器 public TreeSet(Comparator<?...所以如果理解了 TreeMap,那么 TreeSet 就很简单了。
前言 首先要注意的是,本文章不涉及到红黑树的具体实现,也就是说不会逐行分析TreeMap和TreeSet的源码实现,因为红黑树看了也会忘的… 所以本文只是记录红黑树的一些基础介绍,以及TreeMap和...TreeSet两个类的公共API. ---- 红黑树 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。...该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。...TreeSet是基于TreeMap实现的。...TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
TreeSet(红黑树) 基于排列 顺序实现,元素不重复 实现了SortedSet接口,对集合元素自动排序。 元素对象的类型必须实现Comparable接口,指定排序规则。...红黑树 二叉查找树 TreeSet的使用 存储结构是红黑树。 第二个xyz是不可以加进来的。...红黑树的遍历: 现在如果 要加数据,那么怎么进行比较呢 ,就是如果转成coomparable,就是说如果要 把person加入到treeset中,必须实现comparable接口。...TreeSet使用案例 使用TreeSet集合实现字符串按照长度进行排序。 注意,是先比较长度,如果长度一样,就比较n2用他们自己的方法compareTo。
领取专属 10元无门槛券
手把手带您无忧上云