Java中集合自动排序的实现初步

励志称为JAVA之父的第30天
public class Main {
    public static void main(String[] args) {
        //第一种:创建集合并且在构造器中传递一个自定义类的比较器对象,因为在自定义比较器中重写过compare(o1,o2)方法
        TreeSet<WuGui> ts = new TreeSet<>(new WuGuiComparator());
        //第二种:或者使用匿名内部类的方式去便捷的使用compare方法
        //以上两种方式不管是写自定义类还是匿名类的方式输出结果都是一样的,都属于实现Comparator的方式
        TreeSet<WuGui> WuGuis = new TreeSet<>(new Comparator<WuGui>() {
            @Override
            public int compare(WuGui o1, WuGui o2) {
                return o1.age - o2.age;
            }
        });

        WuGui wuGui1 = new WuGui(12);
        WuGui wuGui2 = new WuGui(184);
        WuGui wuGui3 = new WuGui(43);
        WuGui wuGui4 = new WuGui(2);
        WuGui wuGui5 = new WuGui(86);
        ts.add(wuGui1);
        ts.add(wuGui2);
        ts.add(wuGui3);
        ts.add(wuGui4);
        ts.add(wuGui5);
        //增强for循环取出ts集合中的值
        for (WuGui wugui : ts){
            System.out.println(wugui);
        }
    }
}
class WuGui {
    int age;
    public WuGui(int age) {    //有参构造器
        this.age = age;
    }
    public String toString(){   //重写toString方法
        return "WuGui["+age+"]";
    }
}
class WuGuiComparator implements Comparator<WuGui>{  //自定义类去实现比较器中的compare方法
    public int compare(WuGui o1,WuGui o2){
        return o1.age - o2.age;
    }
}
tip:
1.Comparable接口中compareTo方法返回值很重要:返回0表示相同,value覆盖;返回>0则从右子树找反之<0则从左子树上找

2.自平衡二叉树数据结构:遵循左小右大原则,遍历二叉树的时候有三种方法分别为前序遍历(根左右).中序遍历(左根右).
    后序遍历(左右根),根在前面是前序,根在中间是中序,根在后面是后序,而TreeSet和        TreeMap集合采用的是中序
    遍历方式"左根右"

3.TreeSet集合中可排序的第二种方式:使用比较器的方式

4.对于实现自动排序的方式有两种:第一种为实现Comparable接口中的compareTo方法(以一通百,便捷)
                            第二种为实现Comparator中的compare方法(耦合低,符合OCP原则)

5.如果比较规则经常发生改变则使用第二种comparator
  反之比较规则不会经常改动或者说比较规则只有一个的时候则使用实现Comparable接口
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏航航航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值