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<
参考链接: 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是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。所以要理解这个类,必须先简单理解一下什么是二叉树。...二叉树原理简析 假如有这么一个集合TreeSet是[5,11,6,5,23,14] 用二叉树是怎么排序的呢? ? 二叉树遍历方法比较多,有兴趣自己百度看下吧。...TreeSet有这么一个构造方法: TreeSet(Comparator comparator) 构造一个新的,空的树集,根据指定的比较器进行排序。 ...两种实现排序方式视情况而用。...()方法返回的结果进行存储 (2)比较器顺序(Comparator) 创建TreeSet的时候可以指定一个Comparator 如果传入了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集合具有比较性。
一、希尔排序与插入排序 1)希尔排序的概念 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort...2)插入排序实现 既然希尔排序是插入排序的优化,那么我们有必要先了解一下插入排序的过程,基本操作是将需要进行排序的元素插入到已排序区当中,这样每次插入都会使已排序区长度加一。...2、将待排序区的第一个元素向已排序区插入,将其与已排序区元素从后向前比较,将其插入到合适位置,已排序区元素个数+1。...3、然后待排序区重复2的步骤向已排序区从后往前比较,找到合适位置插入。 4、 继续将待排序区元素插入到已排序区,当待排序区元素为0时,这组数据就已经排序完成。...如何进行预排序呢?既然希尔排序是插入排序的优化,我们不妨以插排的思路对希尔预排序进行调整。
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
public TreeSet() { this(new TreeMap()); } 每次我们创建一个TreeSet集合时,本质上就是new出了一个TreeMap(...)键值对集合,但是写到这里我还没有分析TreeMap的源码,但是这不影响我的分析,因为我已经分析完TreeSet集合的源码,整个的过程中没有阻塞性,所以分析TreeSet集合继续了。...接下来分析一下TreeSet集合中的first()方法,也就是获取TreeSet集合中第一个元素的方法,这个方法见到的很少,所以这里就分析一下。...我既然分享了如何获取TreeSet集合的第一个元素的方法,自然会去分析一下如何获取TreeSet集合获取最后一个元素pollLast()方法,所以继续分析一下了。...到这里自己想要分析的TreeSet集合就结束了
想要实现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("
今天我们来探索一下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。
堆排序算法原理 强烈推介IDEA2020.2破解激活,IntelliJ IDEA...注册码,2020.2 IDEA 激活码 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。...build_heap(Integer arr[],int n){ //确定最后一个节点的父节点 int parent = (n - 2) / 2; //由下向上堆排序...int temp ; temp = arr[i]; arr[i] = arr[n]; arr[n] = temp; } } 三、堆排序...//堆排序 public void heapSort(Integer[] arr){ //节点的个数 //循环构建堆对象,i表示数组参与堆的个数 for(int i = arr.length
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。
本篇我们把剩下的几种效率一般的排序算法给介绍一下,分别是插入排序,希尔排序和选择排序。 插入排序(Insert Sort) 插入排序是一种简单直观的排序算法。...它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。...希尔排序 (Shell Sort) 希尔排序也称递减增量排序算法或,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。...它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。...,希尔排序,选择排序的算法原理和思想,尽管这些排序算法并不是最优的选择,并不适合大数据量集下的排序,但是了解这些算法的基本思想还是很有必要的。
领取专属 10元无门槛券
手把手带您无忧上云