前言 首先要注意的是,本文章不涉及到红黑树的具体实现,也就是说不会逐行分析TreeMap和TreeSet的源码实现,因为红黑树看了也会忘的… 所以本文只是记录红黑树的一些基础介绍,以及TreeMap和...TreeSet两个类的公共API. ---- 红黑树 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。..., V> tailMap(K from, boolean inclusive) SortedMap tailMap(K fromInclusive) TreeSet...TreeSet是基于TreeMap实现的。...TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
参考链接: 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
我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(红黑树) 基于排列 顺序实现,元素不重复 实现了SortedSet接口,对集合元素自动排序。 元素对象的类型必须实现Comparable接口,指定排序规则。...红黑树 二叉查找树 TreeSet的使用 存储结构是红黑树。 第二个xyz是不可以加进来的。...红黑树的遍历: 现在如果 要加数据,那么怎么进行比较呢 ,就是如果转成coomparable,就是说如果要 把person加入到treeset中,必须实现comparable接口。...TreeSet使用案例 使用TreeSet集合实现字符串按照长度进行排序。 注意,是先比较长度,如果长度一样,就比较n2用他们自己的方法compareTo。
⌨ 深度解析 Java TreeSet 集合 摘要 博主在本篇文章中将深入解析Java中的TreeSet集合,探讨其特性、应用场景以及性能优化。...通过多级标题结构,将引领读者从初步认识TreeSet到最佳实践,最终挑战高质量的面试题,全方位、深度解析TreeSet在Java中的应用。...引言 在Java的集合框架中,TreeSet是一种基于红黑树实现的有序集合。本文将带领读者逐步深入,从基础概念到实际应用,全面解析TreeSet集合的特点和使用方法。...一、初探 TreeSet TreeSet是Java集合框架中的一种有序集合,它使用红黑树作为内部数据结构来存储元素。...下面是关于TreeSet的一些补充信息: 1.1 什么是Java集合类TreeSet? TreeSet是Java中的一个集合类,它继承了AbstractSet类并实现了NavigableSet接口。
其特点如下: 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 接口的常用实现类
_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
在这一篇中我们主要分享一下TreeSet集合的相关知识。在上一篇中我们介绍了HashSet集合的底层实现,并且发现HashSet底层是通过HashMap集合实现的。...那么顾名思义今天我们介绍的TreeSet集合,底层就是通过TreeMap集合实现的。那么废话不多说,我们直接看TreeSet的初始化代码。 初始化 ?...下面我们看一下TreeSet集合中的add方法的底层实现。 ? HashSet中的add方法的实现逻辑基本和HashSet中的实现逻辑一样。都是直接调用了底层Map的实现类。...也就是调用TreeMap中的put方法,并且将value值设置为Object。...既然TreeSet底层是通过TreeMap实现的,那么我们很容易可以总结出TreeSet具有以下的特性: 总结 保存在TreeSet集合中的元素,必须保证能够排序 TreeSet集合中不能保存null
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
泥瓦匠的记忆宫殿: 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 方法被称为它的自然比较方法。
认识 TreeMap 和 TreeSet TreeMap 和 TreeSet 是Java 中利用红黑树实现的 Map 和 Set。...传入 Map 的构造方法 调用此构造方法将会新建一个 TreeMap,并且将传入的 Map 中的元素全部放入新建的 TreeMap 当中。 所有传入的 Key 必须实现 Comparable接口。...传入一个带比较器的 Map 的构造方法 将传入的 Map 中的元素全部放入新建的 TreeMap 中,并且使用 Map 中的比较器进行比较。...TreeSet TreeSet 只存储 Key,是一种纯Key 模型。它的底层其实是 TreeMap,结构也是二叉搜索树。 构造方法 1....无参构造方法 由于 TreeSet 的底层是 TreeMap(前面文章已讲过),因此,TreeSet 的底层结构也是二叉搜索树,也就意味着放入 TreeSet 中的元素必须是可比较的(即实现了 Comparable