zoukankan      html  css  js  c++  java
  • (9)集合之Set,HashSet,TreeSet

    TreeSet子类

    注意事项:

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

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

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

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

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

    5TreeSet添加元素的时候,如果元素本身不具备自然顺序特性,而元素所属的类已经实现了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,有姓名和年龄,按照年龄从小到达的顺序排列如果年龄相同的话,则在 比较姓名

     1 // Person实现Comparable接口
     2 @Override
     3     public int compareTo(Object o) {
     4         Person p = (Person) o;
     5         
     6         if(this.getAge() > p.getAge())
     7             return 1;
     8         if(this.getAge() < p.getAge())
     9             return -1;
    10         return this.getName().compareTo(p.getName());
    11     }
    12 
    13 // 自顶一个一个自己的比较器 
    14 class MyComparator implemments Comparator
    15 {
    16   public int compareTo(Object 01, Object o2)
    17   {
    18     Person p1 = (Person) o1;
    19     Person p2 = (Person) o2;
    20 
    21     if(p1.getAge() > p2.getAge()) return 1;
    22     if(p1.getAge() < p2.getAge()) return -1;
    23     return p1.getName().compareTo(p2.getName());
    24   }    
    25 }
  • 相关阅读:
    PAT (Basic Level) Practise 1013 数素数
    PAT (Basic Level) Practise 1014 福尔摩斯的约会
    codeforces 814B.An express train to reveries 解题报告
    KMP算法
    rsync工具
    codeforces 777C.Alyona and Spreadsheet 解题报告
    codeforces 798C.Mike and gcd problem 解题报告
    nginx + tomcat多实例
    MongoDB副本集
    指针的艺术(转载)
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6019329.html
Copyright © 2011-2022 走看看