学习博客:TreeSet的自然排序

TreeSet有自然排序也有选择器排序,这里先写自然排序。`
自然排序没啥说的,就是直接调用内部的Compare构造器排,算法运用的是红黑树的排序方法。

package cn.setdemo;

import java.util.HashSet;
import java.util.Set;

//         Collection
//        I --List
//        有序(存储顺序和职出顺序致),可重复
//        | --Set
//        无序(存储顺序和取出顺序不-致) ,唯- -
//        Hashset:它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。
//        注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,
//        而你的顺序恰好和它的存储顺序一致, 这代表不了有序,你可以多存储一些数据,就能看到效果。
public class SetDemo {
    public static void main(String[] args) {
        Set<String> set =new HashSet<String>();
        set.add("hello");
        set.add("world");
        set.add("java");
        set.add("world");
        set.add("java");
        for (String x : set)
        {
            System.out.println(x);
        }
    }
}

当自然排序遇到了形参的话,需要自己去重写ComareTo的方法:

package cn.setdemo_01;

import java.util.Objects;

public class Student implements Comparable<Student>{
            private  int age;
            private  String name;


            public Student(String name, int age) {
                this.age = age;
                this.name = name;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public int getAge() {
                return age;
            }

            public void setAge(int age) {
                this.age = age;
            }

    @Override
    public int compareTo(Student o) {
        //int num =o.age-this.age;
       // int num2 = num==0?this.name.compareTo(o.name):num;
        //先比年龄后比字符串,第一个字符不同就返回第一个字符,都一样返回长度之差
        int num = this.name.length()-o.name.length();
        int num2 = num==0?this.name.compareTo(o.name):num;
        int num3 = num2==0?o.age-this.age:num2;
         //如果年龄相同就比姓名,否则还是返回年龄。
        //判断num等不等于零,等于零的话
        //int num2=this.name.compareTo(s.name)
        //注:compareTo返回的是字符串长度之差
        return num3;
    }



}


主方法

 package cn.setdemo_01;

import sun.reflect.generics.tree.Tree;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetDemo {
    public static void main(String[] args) {
        TreeSet<Student> hs=new TreeSet<Student>(); // 用的是自然排序
        hs.add(new Student("zsp",20));
        hs.add(new Student("wlx",22));
        hs.add(new Student("lfl",21));
        hs.add(new Student("wlx",20));
        hs.add(new Student("lfl",21));
        hs.add(new Student("jxf",22));
        hs.add(new Student("qax",22));
        for (Student s:hs)
        {
            System.out.println(s.getName()+"----"+s.getAge());
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值