参考链接: Java TreeSet TreeSet() 构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。 ...TreeSet(Collection extendsE> c) 构造一个包含指定 collection 元素的新 TreeSet,它按照其元素的自然顺序进行排序。 ...TreeSet(Comparator superE> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序。 ...TreeSet(SortedSet s) 构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet。 ...从类 java.util.AbstractSet继承的方法 equals,hashCode,removeAll 从类 java.util.AbstractCollection继承的方法 containsAll
前言 首先要注意的是,本文章不涉及到红黑树的具体实现,也就是说不会逐行分析TreeMap和TreeSet的源码实现,因为红黑树看了也会忘的… 所以本文只是记录红黑树的一些基础介绍,以及TreeMap和...TreeSet两个类的公共API. ---- 红黑树 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。..., V> tailMap(K from, boolean inclusive) SortedMap tailMap(K fromInclusive) TreeSet...TreeSet是基于TreeMap实现的。...TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
我jio得非常有必要学习一下JAVA中的STL。好了,不瞎哔哔了。...说正经的: 我是站在C++的基础上来理解JAVA的Set用法的,如果不知道C++中set用法的小伙伴请戳链接:某大佬的博客链接—C++中set的用法。...JAVA中常用的Set方法: 函数和用法 add( ) 向集合中添加元素 clear( ) 去掉集合中所有的元素 contains( ) 判断集合中是否包含某一个元素...中的set有三种:HashSet,TreeSet和LinkedHashSet。...①HashSet的输出顺序是不确定的,但是它的速度最快; ②TreeSet输出顺序是升序排列的,相当于C++中的set,个人比较喜欢这种; ③LinkedHashSet输出顺序是确定的,就是插入时的顺序
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排序。...orange");System.out.println(set); // 输出结果:[apple, banana, orange]在这个示例中,我们首先创建了一个TreeSet,然后向其中添加了三个字符串元素...添加和删除元素TreeSet提供了add()和remove()方法来添加和删除元素,它们的语法和用法与HashSet和LinkedHashSet中的相同,不再赘述。...其中:first()方法返回TreeSet中的第一个(最小的)元素。last()方法返回TreeSet中的最后一个(最大的)元素。
TreeSet数据排序两种方式: 注意:TreeSet是在添加数据时进行排序,数据更改不会影响原来的顺序,因此不能修改类中数据,否则可能重复。...1)、若选用无参的new TreeSet()构造器,需要元素本身可以排序方能使用,也即实体类实现java.lang.Comparable接口重写compareTo接口。 ...()构造器 package top.wfaceboss.caseSort02; import java.util.TreeSet; public class TreeSetDemo { public...super E> comparator)构造器--提供额外的业务排序类(匿名内部类的方式) package top.wfaceboss.caseSort; import java.util.TreeSet...容器中 // 由于Person类没有实现java.lang.Comparable重写compareTo接口 ,因此需要提供额外的业务排序类,否则会出错 TreeSet<
)键值对集合,但是写到这里我还没有分析TreeMap的源码,但是这不影响我的分析,因为我已经分析完TreeSet集合的源码,整个的过程中没有阻塞性,所以分析TreeSet集合继续了。...java这门语言没有一个很高的把握,但是工作中的内容还是可以的,那个时候自己都写了java8的写法,但是时过两年后自己才去输出和分享了java8的文章,所以觉得自己想写的文章是不是拖延了很久,读过我的文章读者的就知道...接下来分析一下TreeSet集合中的first()方法,也就是获取TreeSet集合中第一个元素的方法,这个方法见到的很少,所以这里就分析一下。...null) throw new NoSuchElementException(); return e.key;//返回获取到的entry节点的key,这就是set集合中的元素...= null)//循环判断根节点的右自述节点是否为空,若不为空则循环判断 p = p.right; return p; } 继续分析TreeSet集合中如何获取元素个数的方法
2.2 TreeSet的用法 TreeSet 二叉查找书,所以结果为升序,任何顺序添加打印结果都为升序。 ...例:2.2.1 import java.io.*; import java.util.*; public class TestMark_to_win { public static void...main(String args[]) { TreeSet t = new TreeSet(); t.add("2"); t.add("1");
image.png 再看看TreeSet: image.png image.png 再次破案,就是TreeMap上面套层皮...
其特点如下: TreeSet 是基于 TreeMap 的 NavigableSet 实现; TreeSet 的元素存储在 TreeMap 中的 key 中,TreeMap 的 value 是一个常量对象...; 非线程安全; java8 新增分割器 spliterator() 方法 ---- 二、TreeSet 的使用 1、构造方法 方法名 方法说明 方法名 方法说明 public TreeSet() 无参构造方法...E pollLast() 获取最后一个元素,并将该元素从TreeMap中删除 void writeObject(java.io.ObjectOutputStream s) 将TreeSet的“比较器、...容量,所有的元素值”都写入到输出流中 void readObject(java.io.ObjectInputStreams) 从输入流中读取TreeSet的“比较器、容量,所有的元素值” ---- 三...3、关于 TreeSet 和 TreeMap 的区别 TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类
TreeSet(红黑树) 基于排列 顺序实现,元素不重复 实现了SortedSet接口,对集合元素自动排序。 元素对象的类型必须实现Comparable接口,指定排序规则。...红黑树 二叉查找树 TreeSet的使用 存储结构是红黑树。 第二个xyz是不可以加进来的。...红黑树的遍历: 现在如果 要加数据,那么怎么进行比较呢 ,就是如果转成coomparable,就是说如果要 把person加入到treeset中,必须实现comparable接口。...TreeSet使用案例 使用TreeSet集合实现字符串按照长度进行排序。 注意,是先比较长度,如果长度一样,就比较n2用他们自己的方法compareTo。
_05; import java.util.TreeSet; /* * TreeSet:能够对元素按照某种规则进行排序。...; import java.util.Scanner; import java.util.TreeSet; /* * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台...System.out.println("请输入第" + x + "个学生的英语成绩:"); String englishString = sc.nextLine(); // 把数据封装到学生对象中...this.age - s.age : num2; return num3; } } package cn.itcast_06;(2) import java.util.TreeSet; /* *...; import java.util.TreeSet; /* * 需求:请按照姓名的长度排序 * * TreeSet集合保证元素排序和唯一性的原理 * 唯一性:是根据比较的返回是否是0来决定。
所以,也不废话了,直接上源码: package java.util; // TreeSet实现了NavigableSet接口,所以它是有序的public class TreeSet extends...AbstractSet implements NavigableSet, Cloneable, java.io.Serializable{ // 元素存储在NavigableMap...中 // 注意它不一定就是TreeMap private transient NavigableMap m; // 虚拟元素, 用来作为value存储在map中...super E> comparator) { this(new TreeMap(comparator)); } // 将集合c中的所有元素添加的TreeSet中 public...extends E> c) { this(); addAll(c); } // 将SortedSet中的所有元素添加到TreeSet中 public TreeSet
: com.kevin.exercise10.User cannot be cast to java.lang.Comparable at java.util.TreeMap.put(TreeMap.java...:542) at java.util.TreeSet.add(TreeSet.java:238) at com.kevin.exercise10.TreeSetTest.main(TreeSetTest.java...(1)自然顺序(Comparable) TreeSet类的add()方法中会把存入的对象提升为Comparable类型 调用对象的compareTo()方法和集合中的对象比较 根据compareTo...()方法返回的结果进行存储 (2)比较器顺序(Comparator) 创建TreeSet的时候可以指定一个Comparator 如果传入了Comparator的子类对象,那么TreeSet就会按照比较器中的顺序排序...调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数 (3)两种方式的区别 TreeSet构造函数什么都不传,默认按照类中Comparable的顺序(没有就报错
HashSet类 HashSet具有以下特点: HashSet具有很好的对象检索性能,当从HashSet中查找某个对象时,Java系统首先调用对象的hashCode方法获得该对象的哈希码,然后根据哈希码找到对应的存储区域...Object first(); //第一个;返回集合中的第一个元素。 Object last(); //最后一个;返回集合中的最后一个元素。...Object lower(Object o); //前一个;返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,参考元素不需要是TreeSet的元素)。 ...Object higher(Object o); //后一个;返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,参考元素不需要是TreeSet的元素)。...所以当我们把Person对象添加到persons集合中时,无须Person类实现Comparable接口,因为此时TreeSet无须通过Person对象来比较大小,而是由与TreeSet关联的Compartor
泥瓦匠的记忆宫殿: 1、不允许包含相同元素 2、判断对象是否相同,根据 equals 方法 二、HashSet 一个按着 Hash 算法来存储集合中的元素,其元素值可以是 NULL。...HashSetObj 类满足我们刚刚的要求,所以集合中只有一个且它的HashCode值为2。 HashCodeObj 类虽然它们HashCode值为 1,但是他们不相等。...四、TreeSet TreeSet 使用树结构实现(红黑树),集合中的元素进行排序,但是添加、删除和包含的算法复杂度为 O(log(n))。...举个例子吧,首先我们定义一个 Bird 类:(鸟是泥瓦匠最喜欢的动物) 然后用TreeSet添加Bird类: Run 一下,控制台输出如下: 答案很明显,TreeSet 是排序的。...java.lang.Comparable 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
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的实现类。...也就是调用TreeMap中的put方法,并且将value值设置为Object。...既然TreeSet底层是通过TreeMap实现的,那么我们很容易可以总结出TreeSet具有以下的特性: 总结 保存在TreeSet集合中的元素,必须保证能够排序 TreeSet集合中不能保存null
——东野圭吾《白夜行》 0 前言 上篇我们分析了HashSet,它是组合了 HashMap 实现的,那TreeSet会是怎么实现的呢?没错!...015E3FFE826FD113FC4546A10FDA5288] 3.2 有参 构造一个包含指定集合中元素的新TreeSet,并根据其元素的自然顺序对其进行排序。...插入集合中的所有元素必须实现Comparable接口。...插入到集合中的所有元素必须与指定的比较器相互比较:compare.compare(e1,e2)不得为集合中的任何元素e1和e2抛出ClassCastException。...所有不会产生重复的 key ,利用这一特性,使用 TreeSet 正好可以去重. 5 ceiling TreeSet中实现NavigableSet接口 [5088755_1583917527579_8BAB0869A6DD644D037E218F9EC51E46
下面我们通过案例来看一下TreeSet的使用. 1、使用TreeSet)对String类型的数据进行存储,存储顺序默认按字母升序排序。...在本例题中,定义TreeSet集合,并添加多个字符串到集合中,然后对集合进行遍历输出,并通过first()和last()方法来获取集合的第一个和最后一个元素。...在本例题中,定义TreeSet对象,并向集合中添加整型数据,然后输出集合对象,也就是将数据放到中输出,这是集合的默认输出格式。...小伙伴可以参考floor()方法进行练习呦~ 3、当TreeSet中添加自定义类的对象时,是如何进行排序的呢?...2)定义PersonComparato类,实现年龄的升序排序 3、在测试类的主方法中,定义五个Person:类的对象,并添加到TreeSet中,然后显示集合所有元素。
领取专属 10元无门槛券
手把手带您无忧上云