zoukankan      html  css  js  c++  java
  • Day 7:TreeSet

    补充上一日:HashCode方法默认返回的是内存地址,String类已经重写了对象的HashCode方法

     方法细节:取出数组中的值或字符串的值按照规定计算返回一个值,如果两个字符串内容一致就会返回相同的HashCode码

    TreeSet

     treeSet添加自定义元素注意事项

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

      2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素

       的比较规则定义在compareTo(T o)方法上。
      
      3. 如果比较元素的时候,compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加.(注意:TreeSet与HashCode、equals方法是没有任何关系。)
      
        4. 往TreeSet添加元素的时候, 如果元素本身没有具备自然顺序的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个
        比较器,
      

    //自定义比较器的格式 :
                 
                 class  类名  implements Comparator{
                   public int compare(To o1, To o2) {
                 return o1.id-o2.id;
               }
           }

      5.  往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口, 在创建TreeSet对象的时候也传入了比较器

              那么是以比较器的比较规则优先使用。

    推荐使用:使用比较器(Comparator)。,使得其他类也可以用,提高复用性

    import java.util.Comparator;
    import java.util.TreeSet;
    
    
    class  gongzitiao implements Comparable<gongzitiao>{
        
        int id;
        String name;
        int salary;
    
        public gongzitiao(int id, String name, int salary) {
            super();
            this.id = id;
            this.name = name;
            this.salary = salary;
        }
        
        @Override
        public String toString() {
            return "{ 编号:"+  this.id+" 姓名:"+ this.name+" 薪水:"+ this.salary+"}";
        }
    
        public int compareTo(gongzitiao o) {
            return this.salary- o.salary;
        }    
    }
    
    //自定义比较器
    class MyComparator implements Comparator<gongzitiao>{
    
        @Override
        public int compare(gongzitiao o1, gongzitiao o2) {
            return o1.id-o2.id;
        }
    }
    
    public class Demo1 {
        
        public static void main(String[] args) {
            MyComparator comparator = new MyComparator();
            TreeSet tree = new TreeSet(comparator);
            
            tree.add(new gongzitiao(114, "李杰", 520));
            tree.add(new gongzitiao(117, "嘻嘻", 250));
            tree.add(new gongzitiao(141, "李英", 258));
            tree.add(new gongzitiao(120, "李汉三", 2580));
            System.out.println(tree);
        }
    }

     

    TreeSet存储原理

      底层是使用红黑树(二叉树)数据结构实现的

      存储规则:左小右大

      当重复元素加入时 treeSet调用compareTo方法,返回值如果是零就视为重复元素,就无法加入二叉树中。

      注意:如果加入三组数据无法形成二叉树结构就会发生下面变化

      目的:减少比较次数

    TreeSet对字符串进行排序

    原因:因为字符串已经实现了Comparable接口所以可以排序

    字符串的比较规则:
     
       一、 对应位置有不同的字符出现, 就比较的就是对应位置不同的字符。

       二、对应位置上 的字符都一样,比较的就是字符串的长度。

    public class Demo2 {
        public static void main(String[] args) {
            /*TreeSet tree = new TreeSet();
            tree.add("abcccccccccccccccccc");
            tree.add("abc");
            System.out.println(tree);*/
            System.out.println("abw".compareTo("abcccccccccccc"));    
        }
    }

    作业:将字符串中的数值进行排序。
        例如String str="8 10 15 5 2 7"; ---->   "2 5 7 8 10 15"

    import java.util.Iterator;
    import java.util.TreeSet;
    
    public class Demo3 {
        
        public static void main(String[] args) {
            String str="8 10 15 5 2 7";
            String[] data = str.split(" ");
            
            TreeSet tree = new TreeSet();
            for(int i = 0 ; i<data.length ; i++){
                tree.add(Integer.parseInt( data[i]));
            }
            
            Iterator it = tree.iterator();
            while(it.hasNext()){
                System.out.print(it.next()+" ");
            }
        }
    }
  • 相关阅读:
    org.springframework.transaction.CannotCreateTransactionException Could not open
    org.springframework.web.util.NestedServletException Handler processing failed; n
    SSM 后台封装的有值, 到前台打印的时候没有值
    javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException PK
    a 链接点击下载
    form图片上传遇到错误
    forever 启动nodejs
    nodejs 新建项目
    nodejs 安装
    nodejs 爬虫模板 map&array 数据模型
  • 原文地址:https://www.cnblogs.com/JYDesigner/p/9354120.html
Copyright © 2011-2022 走看看