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. iOS核心笔记—MapKit框架-基础

    1.MapKit框架简介: ✨了解:MapKit框架使用须知:①.MapKit框架中所有的数据类型的前缀都是MK:②.需要导入#import <MapKit/MapKit.h>头文件:③. ...

  2. [工作总结] QA小鸟一年了

    夏至又至,在北京360的一年过去了.作为一名QA,我时常感到迷惑,如何靠大部分的手工测试+少部分的自动化测试来保证产品功能的质量.对于开发完成后,给到我手上的文件和功能说明,我很少有信心说能够通过自己 ...

  3. gevent拾遗

      在前文已经介绍过了gevent的调度流程,本文介绍gevent一些重要的模块,包括Timeout,Event\AsynResult, Semphore, socket patch,这些模块都涉及当 ...

  4. 使用devstack搭建openstack Newton 版本的坑

    国外源访问速度慢怎么办? 使用国外源,加之带宽紧张,搭建过程是很累的,这里推荐大家使用一下源: devstack包源.:http://git.trystack.cn pip源: [global] in ...

  5. MATLAB 单变量函数一阶及N阶求导

    1 对一维函数的求导及求特定函数处的变量值 %%最简单的一阶单变量函数进行求导 function usemyfunArray() %主函数必须位于最上方 clc clear syms x %syms ...

  6. JVM内存

    大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack( ...

  7. Android 获取浏览器当前分享页面的截屏

    Android 获取浏览器当前分享页面的截屏 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/BrowserScreenShotActivity 文中 ...

  8. JVM内存分配与回收策略

    对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配. 当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC. Minor GC:新生代GC,指发生在新生代的垃圾收集动作 ...

  9. phpcms v9更改后台文章排序的方法

    后台文章排序怎么才可以按自己输入的数字排列?如按4,3,2,1,从大到小排列?实现方法如下: 修改文件: phpcms\modules\content 中的 content.php 代码如下: $da ...

  10. HNOI2015 Day 1

    HNOI2015的题还是非常漂亮的,几道题都有很大的借鉴意义,都有很强的思考性 T1亚瑟王(概率论) 描述:http://www.lydsy.com/JudgeOnline/problem.php?i ...