ht-7 treeSet特性
TreeSet
TreeSet可以对set集合中的元素进行排序,默认按照asic码表的自然顺序排序,之所以treeset能排序是因为底层是二叉树,数据越多越慢,TreeSet是依靠TreeMap来实现的
像TreeSet中存储自定义对象需要实现comparable接口。
package com.iotek.set; import java.util.Iterator;
import java.util.TreeSet; public class TreeSetDemo1 { public static void main(String[] args) { TreeSet<Personb> pset = new TreeSet<Personb>();
pset.add(new Personb("chenchen", 30));
pset.add(new Personb("lisi", 20));
pset.add(new Personb("wangwu", 10));
pset.add(new Personb("rose", 40));
pset.add(new Personb("rose", 41));
System.out.println(pset);
Iterator<Personb> it = pset.iterator(); //
while (it.hasNext()) { // 判断容器中有没有被迭代的数据
Personb p = it.next(); // 取出来的是个Person类型
System.out.println(p.getName() + "--" + p.getAge());
} /*
* 调用TreeSet类的对象pset的iterator()方法,返回一个迭代器对象, 使用这个迭代器对象
*/ /*
* (1)当Person类不实现Comparable接口时,System.out.println(pset)这条语句会报错:
* Exception in thread "main"java.lang.ClassCastException:
* com.iotek.set.Person cannot be cast to java.lang.Comparable
* 这是因为,TreeSet和TreeMap一样,都是按照键的自然顺序来升序排列,
* 对象无法做自然升序排列,应该要告诉TreeSet按照什么规则来排序
* (2)如何对TreeSet对象的add()方法中添加的对象进行排序?需要这个对象的类
* 来实现Comparable接口,在接口中重写compareTo()方法,来声明比比较规则
*/
} } /*
* 当调用TreeSet的无参数构造方法,其内部创建了一个TreeMap对象 public TreeSet() { this(new
* TreeMap<E,Object>()); }
*/
class Personb implements Comparable<Personb> {
private String name;
private int age; public Personb(String name, int age) {
super();
this.name = name;
this.age = age;
// this.age是Person类的实例化对象的age
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public int compareTo(Personb o) {
if (this.age - o.getAge() > 0) {
return 1;
} else if (this.age - o.getAge() < 0) {
return -1;
}
return 0;
} @Override
public String toString() {
return "Personb [name=" + name + ", age=" + age + "]";
} }
TreeSet及常用API
(1)TreeSet为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索很快
(2)在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择
(3)构造方法
TreeSet()
TreeSet(Collection c)
TreeSet(Comparator comp)
TreeSet(SortedSet ss)
(4)总结 :TreeSet的内部操作的底层数据是TreeMap,只是我们操作的是TreeMap的Key
TreeMap的Key是默认按照自然顺序升序排列的
ht-7 treeSet特性的更多相关文章
- Leetcode分类刷题答案&心得
Array 448.找出数组中所有消失的数 要求:整型数组取值为 1 ≤ a[i] ≤ n,n是数组大小,一些元素重复出现,找出[1,n]中没出现的数,实现时时间复杂度为O(n),并不占额外空间 思路 ...
- JavaSE理论篇
将已学过的知识记录在此,既能便于以后温习又能方便知识共享,做到共同成长. 计算机语言发展简史 主要分为三个阶段 机器语言:打点机,有点表示1,没有表示0,打点计时器 低级语言:汇编语言 高级语言:Ja ...
- 五、Java - 集合
一.集合 Java 中的集合类存放于 java.util 包中,是一个存放对象的容器. 集合存放的是对对象的引用,对象本身还是存在于 JVM 堆内存中. 存放的是对象,即引用数据类型,对于基本数据类型 ...
- Stream流的基本介绍以及在工作中的常用操作(去重、排序以及数学运算等)
平时工作中,我在处理集合的时候,总是会用到各种流操作,但是往往在处理一些较为复杂的集合时,还是会出现无法灵活运用api的场景,这篇文章的目的,主要是为介绍一些工作中使用流时的常用操作,例如去重.排序和 ...
- TreeSet的特性
TreeSet在Set的元素不重复的基础之上引入排序的概念,其中对自身拥有Comparable的元素,可以直接进行排序,比如字符串,按照字母的自然顺序排序,此处说下对于自定义对象排序的方式. 1.存储 ...
- 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析
收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...
- 2020你还不会Java8新特性?
Java8(1)新特性介绍及Lambda表达式 前言: 跟大娃一块看,把原来的电脑拿出来放中间看视频用 --- 以后会有的课程 难度 深入Java 8 难度1 并发与netty 难度3 JVM 难度4 ...
- HashSet HashTable 与 TreeSet
HashSet<T>类 HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. HashSet& ...
- 集合 LinkedList、ArrayList、Set、Treeset
LinkedList中特有的方法: 1:方法介绍 addFirst(E e) addLast(E e) getFirst() getLast() removeFirst() removeLast() ...
随机推荐
- Delphi XE2 之 FireMonkey 入门(10) - 常用结构 TPoint、TPointF、TSmallPoint、TSize、TRect、TRectF 及相关方法
它们都是结构, TPointF.TRectF 属新增, 其它也都有升级; 现在都拥有丰富的方法和方便的运算符重载; 且有一组相关的公共函数. 这组内容重要的是它们都来自 System.Types 单元 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化
自定义文件命名 文件名称被写死了 服务器上传了一张图片,服务器就停止了 把服务器端的代码放在while循环里面 服务器也不用 关闭了. 上传完成后服务器端没有关闭 再来启动客户端,又上传一张投片. 多 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_10_字节输入流一次读取一个字节的原理
原理解析 创建一个字节流,指向读取文件的第一个字节. read找jvm,jvm找os.os去读取硬盘.,读取后指正向后移动一位
- 【Linux】limits.conf 不重启就生效或者不生效的原因
前阵子,我要用到使LInux的文件打开数为65534个,而且需要永久生效,于是将配置写到了: vim /etc/security/limits.conf * soft nofile 65534* ha ...
- redis 设置密码 和 redis.config文件
- java静态代码块,构造方法,初始化块的执行顺序
代码Parent和Sub进行讲解 public class Parent { private static final String name; public Parent() { System.ou ...
- Visual Studio 2017打包安装项目
在我们用VS编好上位机后,就可以在自己电脑运行上位机,但是想其他人电脑运行上位机可能就行不通了,因为其他人电脑不一定有所需要的运行环境.这时我们就需要打包安装,把运行软件所需要的环境都打包在安装包里. ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
- 2019牛客暑期多校训练营(第五场) - C - generator 2 - BSGS
https://ac.nowcoder.com/acm/contest/885/C 这个跟平时那种求离散对数的bsgs不一样,虽然可以转化成离散对数来做不过会T掉.展开递推式然后合并具有a的项,发现其 ...
- 数组去重ES6
原文链接:https://juejin.im/post/5b17a2c251882513e9059231 1,去除简单类型 //ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ...