• Java连载89-SorteSet、Comparable接口


    一、 SortedSet集合直接举例

    package com.bjpowernode.java_learning;
    
    import java.util.*;
    
    /**
    
     * java.util.Set
    
     *   java.util.SortedSet;无序不可以重复,但是存进去的元素可以按照元素大小顺序自动进行排列
    
     *     java.utile.TreeSet;
    
     */
    
    import java.text.*;
    
    public class D89_1_SortedSet {
    
      public static void main(String[] args) throws ParseException{
    
        //创建集合
    
        SortedSet ss = new TreeSet();
    
        //添加元素
    
        ss.add(10);//自动装箱
    
        ss.add(12);
    
        ss.add(5);
    
        ss.add(78);
    
       
    
        Iterator i = ss.iterator();
    
        while(i.hasNext()) {
    
          Object element = i.next();
    
          System.out.println(element);
    
        }
    
        //String
    
        SortedSet sts = new TreeSet();
    
        sts.add("Jack");
    
        sts.add("SUN");
    
        sts.add("COOK");
    
        sts.add("LUCKY");
    
        Iterator i2 = sts.iterator();
    
        while(i2.hasNext()) {
    
          Object element = i2.next();
    
          System.out.println(element);
    
        }
    
        //日期Date
    
        String t1 = "2008-08-08";
    
        String t2 = "2009-08-08";
    
        String t3 = "2008-09-08";
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    
        Date dt1 = sdf.parse(t1);
    
        Date dt2 = sdf.parse(t2);
    
        Date dt3 = sdf.parse(t3);
    
       
    
       
    
        SortedSet sss = new TreeSet();
    
        sss.add(t1);
    
        sss.add(t2);
    
        sss.add(t3);
    
       
    
        //遍历
    
        Iterator its = sss.iterator();
    
        while(its.hasNext()) {
    
          Object element = its.next();
    
          if(element instanceof Date) {
    
            Date d = (Date)element;
    
            System.out.println(sdf.format(d));
    
          }   
    
        }
    
      }
    
    }

    二、实现Comparable接口

    1.SortedSet集合存储元素为什么可以进行自动排序

    因为被存储的元素实现了Comparable接口,SUN编写TreeSet集合在添加元素的时候,会调用compareTo方法​完成比较。

     
    
    package com.bjpowernode.java_learning;
    
    ​
    
    import java.util.*;
    
    import java.lang.*;
    
    ​
    
    public class D89_2_ImplementComparable {
    
      public static void main(String[] args) {
    
        SortedSet s = new TreeSet();
    
        User89 u1 = new User89(3);
    
        User89 u2 = new User89(45);
    
        User89 u3 = new User89(12);
    
        User89 u4 = new User89(25);
    
        s.add(u1);
    
        s.add(u2);
    
        s.add(u3);
    
        s.add(u4);
    
       
    
        Iterator i = s.iterator();
    
        while(i.hasNext()) {
    
          Object o = i.next();
    
          System.out.println(o.toString());
    
        }
    
      }
    
    ​
    
    }
    
    class User89 implements Comparable{
    
      int age;
    
      User89(int age){
    
        this.age = age;
    
      }
    
      public String toString() {
    
        return age+"";
    
      }
    
      //实现java.lang.Comparable;接口中的compareTo方法
    
      //该方法程序员负责,SUN提供的程序已经调用了该方法
    
      //需求:按照User89的年龄进行排序
    
      public int compareTo(Object o) {
    
        //编写一个规则
    
        int age1 = this.age;
    
        int age2 = ((User89)o).age;
    
        return age2-age1;
    
       
    
      }
    
    }

    我们改一下最后一行代码​:return age1-age2;

    然后编译运行

     


    总结:我们实现的compareTo方法的时候,它的底层是一个二叉树

    当返回结果大于0,那么比较的元素就会放在右子树(相当于比较出来了结果:大于)​;同理,当返回结果小于0,那么比较的元素就会放在左子树​;

    如果返回零的话,说明这两个对象是完全相同的,因此只会存储一个​对象。(可以看一看Comparable源码,了解一下)​。​

    三、源码:

    D89_1_SortedSet.java

    D89_2_ImplementComparable.java

    https://github.com/ruigege66/Java/blob/master/D88_1_HashSetExample.java

    https://github.com/ruigege66/Java/blob/master/D89_2_ImplementComparable.java

    2.CSDN:https://blog.csdn.net/weixin_44630050

    3.博客园:https://www.cnblogs.com/ruigege0000/

    4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

     

  • 相关阅读:
    图像的熵
    Tomcat6.0中JNDI的配置oracle11g
    JAVA错误:Syntax error on token "else", delete this token
    JAVA利用飞信接口发送短信
    更换ArcGIS 9.3授权ecp文件
    Java调用C++类库JNI
    jsp将变量传递给javascript函数
    windows xp文件夹共享,取消用户名密码输入
    WPF stringformat设置
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/12370088.html
Copyright © 2020-2023  润新知