TreeSet子类

注意事项:

1、向TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储

2、往TreeSet添加元素的时候,如果元素本身不具备自然顺序特性,该元素所属的类必须要实现Comparable接口(该接口只有一个compareTo方法),把元素的比较规则定义在compareTo(T o)方法上。

compareTo()方法负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。

3、如果比较元素的时候compareTo返回的是0的,那么该元素视作添加的是重复元素,set是去重的,多以就不允许添加进来。不去看equals也不看hashCode方法,看的是compareTo方法。

4、往TreeSet添加元素的时候,如果元素本身没有具备自然序列的特性,而元素所属的类,也没有实现comparable接口,那么要在创建TreeSet的时候传入一个比较器。

5、往TreeSet添加元素的时候,如果元素本身不具备自然顺序特性,而元素所属的类已经实现了Comparable接口,再创建TreeSet的时候也传入了自定义个比较器,那么比较器的比较规则优先使用。

比较的工作是有TreeSet做的,但是做之前有要求,1、元素本身具有自然顺序的特性,2不具备自然特性,从两方面下手:2.1让元素实现Comparable接口,重写CompareTo方法,2.2set在创建的时候,给set传入一个比较器comparator

自定义比较器的格式:自定义一个类实现Comparator接口即可,把元素与元素之间的比较规则定义在compare()方法内即可

Class 类名 implements Comparator

{

}

TreeSet的存储原理:底层是使用红黑树(二叉树)数据结构实现的,而且这个二叉树是一个平衡二叉树(这样可以是比较的次数尽可能的少)。存储的规则是:左小右大。

推荐使用Comparator的比较器。为什么这样推荐那呢,Comparable接口,之内在实现该类的自定义类中使用,使用conparator接口的比较器,只要你设计的好,很多地方都可以使用,这样提高了代码的重用性。

 List的contain方法使用的是equals()方法

HashSet集合中则联合使用hashCode和equals方法。

TreeSet是在元素可比的前提下,使用的是Comparable或者Comparator中的compareTo方法

TreeSet是可以对字符串进行排序的,因为字符串已经实现了Comparable接口的

这里说明一下,比较的主体是this,

If(this > obj) return 1;

If (this < obj) return -1;

每个元素是一个Person,有姓名和年龄,按照年龄从小到达的顺序排列如果年龄相同的话,则在 比较姓名

 // Person实现Comparable接口
@Override
public int compareTo(Object o) {
Person p = (Person) o; if(this.getAge() > p.getAge())
return 1;
if(this.getAge() < p.getAge())
return -1;
return this.getName().compareTo(p.getName());
} // 自顶一个一个自己的比较器
class MyComparator implemments Comparator
{
public int compareTo(Object 01, Object o2)
{
Person p1 = (Person) o1;
Person p2 = (Person) o2; if(p1.getAge() > p2.getAge()) return 1;
if(p1.getAge() < p2.getAge()) return -1;
return p1.getName().compareTo(p2.getName());
}
}

(9)集合之Set,HashSet,TreeSet的更多相关文章

  1. Set集合[HashSet,TreeSet,LinkedHashSet],Map集合[HashMap,HashTable,TreeMap]

    ------------ Set ------------------- 有序: 根据添加元素顺序判定, 如果输出的结果和添加元素顺序是一样 无序: 根据添加元素顺序判定,如果输出的结果和添加元素的顺 ...

  2. java基础33 Set集合下的HashSet集合和TreeSet集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  3. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. Leetcode: LFU Cache && Summary of various Sets: HashSet, TreeSet, LinkedHashSet

    Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the f ...

  5. 【java集合系列】---HashSet

    在前面的博文中,小编主要简单介绍了java集合中的总体框架,以及list接口中典型的集合ArrayList和LinkedList,接着,我们来看set的部分集合,set集合和数学意义上的集合没有差别, ...

  6. Java集合框架之HashSet浅析

    Java集合框架之HashSet浅析 一.HashSet综述: 1.1HashSet简介 位于java.util包下的HashSet是Java集合框架的重要成员,它在jdk1.8中定义如下: publ ...

  7. 学习JDK1.8集合源码之--TreeSet

    1. TreeSet简介 TreeSet是Set的实现类之一,是不可重复集合,非线程安全的. TreeSet是SortedSet的唯一实现类,实现了元素的自动排序,排序不是以插入的顺序排序,而是默认以 ...

  8. Java集合之HashSet/TreeSet原理

    Set集合 1.HashSet  只去重复, 没有顺序  HashSet的add方法会调用hashCode和equals, 所以存储在HashSet中的对象需要重写这两个方法. 2.TreeSet   ...

  9. java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)

    说起集合,我们会潜意识里想到另外一个与之相近的名词——数组,OK!两者确实有相似之处,但也正是这点才是我们应该注意的地方,下面简单列出了两者的区别(具体功能的不同学习这篇文章后就会明白了): 数组 长 ...

  10. 集合(七) Set—HashSet,TreeSet和LinkedHashSet

    四.Set Set和List一样,也是继承Collection的接口,但Set是不包含重复元素的集合.由于先啃下Map,Set的难度将会大幅减小.因为Set基本上都是以Map为基础实现的,例如两个主要 ...

随机推荐

  1. Codeforce 712A Memory and Crow

    A. Memory and Crow time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  2. npm 不是内部命令

    最近办公室流行给电脑装win10系统,于是在重新装好电脑系统后,再次运行thinkjs项目的时候,就发现了之前做过的项目打不开了,待再确认问题出在哪里的时候,才发现”nodejs以及npm不是内部或者 ...

  3. linux虚拟机CentOS 7完整安装流程截图

    安装VMware虚拟机过程此处省略,只介绍在虚拟机上安装linux系统CentOS 7过程截图. 1 新建虚拟机 2 命名虚拟机,选择linux安装位置 3 选择虚拟机处理器数量和处理器核心数 4 分 ...

  4. 转: 尽己力,无愧于心 FastReport.Net 常用功能总汇

    FastReport.Net 常用功能总汇   一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要 ...

  5. ASP.NET MVC 导出Word报表

    最近要做MVC导出Word报表功能.查了查资料发现一个好用的插件就是Aspose.Word.这个插件也很有名气,也很好用. 1.首先就是引用该插件 2.填充Word模版 3.后台操作 private ...

  6. Excel与XML相互转换 - C# 简单实现方案

    Excel与XML相互转换 - C# 简单实现方案 在日常工作中,我需要将数据存储在Excel中进行数据分析和处理,然后再将数据转换为XML格式进行跨平台的数据交换.网上搜索Excel转换为XML的实 ...

  7. javascript小程序——用嵌套循环来输出乘法口诀表

    在学习javascript过程中,一开始接触循环语句时一般拿乘法口诀表来练手,这里我将自己的练习贴在这里,希望能给和我一样的初学者些许帮助,也希望大神们能够不吝指教. 首先,来看一下乘法口诀表是什么样 ...

  8. angular : direative : autoResize textarea auto resize

    今天为大家推出自己的auto resize 指令功能. 目的:解决textarea在给height的问题. 参考源码:http://monospaced.github.io/angular-elast ...

  9. Hibernate框架单向多对一关联映射关系

    建立多对一的单向关联关系    Emp.java            private Integer empNo //员工编号            private String empName / ...

  10. 【Zookeeper】源码分析之服务器(二)

    一.前言 前面阐述了服务器的总体框架,下面来分析服务器的所有父类ZooKeeperServer. 二.ZooKeeperServer源码分析 2.1 类的继承关系 public class ZooKe ...