zoukankan      html  css  js  c++  java
  • 对象比较器:Comparable和Comparator

    在进行对象数组排序的过程中需要使用到比较器,比较器有两个:Comparable和Comparator

    ①、java.lang.Comparable:是在类定义是时候默认实现好的接口,里面提供有一个compareTo()方法用于大小比较

    java规定:假如a和b是实现Comparable接口类创建的两个对象,

    当a.compareTo(b)<0时,称a小于b;

    a.compareTo(b)>0时,称a大于b;

    a.compareTo(b)==0时,称a等于b。

    ②、java.util.Comparator:需要单独定义一个排序的比较规则类,里面有两个方法compare(),equals()

    当对象刚开始时没有进行排序,但因后续要求需要进行排序时,为了不影响其他程序,可以使用此接口,新建一个专门用来对这个对象排序的类,这样对其他程序影响不大

    优先使用Comparable

    package com.wzy.main;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.List;
    import java.util.TreeSet;
    
    import org.omg.PortableInterceptor.Interceptor;
    //方式1. 在此类上直接实现
    Comparable接口
    class People implements Comparable{
        People(String name,int age){
            this.name = name;
            this.age = age;
        }
        private String name;
        private int age;
        public int getAge() {
            return age;
        }
        public String getName() {
            return name;
        }
        @Override
        public String toString() {
            return "name="+name+", age="+age;
        }
        @Override
        public int compareTo(Object o) {
            People p = (People)o;
            return p.age-this.age;
        }
    }
    
    //方式2. 使用Comparator比较器
    class PersonComparator implements Comparator {
        @Override
        public int compare(Object one, Object another) {
             return ((People)one).getAge()-((People)another).getAge();
        }
        
    }
    


    public class Test01 {
    public static void main(String[] args) {

    List<People> list = new ArrayList<People>();
    list.add(new People("aaa", 15));
    list.add(new People("bbb", 10));
    list.add(new People("ccc", 16));
    list.add(new People("ddd", 13));
    list.add(new People("eee", 19));


    /*1 、使用Comparable,按照age来排*/
    // Collections.sort(list);//1.1 传统实现方式,list的状态已经被改变为排序完的状态了
    list.stream().sorted().forEach(System.out::println);//1.2 使用lambda表达式实现,没有改变list的状态

    List l = Arrays.asList(list.stream().sorted().toArray());//直接把排序好的对象取出来

    /*2 、使用Comparator比较器,按照age进行排序*/
    // Collections.sort(list, new PersonComparator());//2.1 传统实现
    // list.stream().sorted((one,another)->((People)one).getAge()-((People)another).getAge())
    // .forEach(System.out::println); 2.2 lambda表达式实现

    /**
    * 建议使用lambda表达式,这样不会改变对象的状态
    *
    * */
    Iterator<People> interceptor = list.iterator();
    while(interceptor.hasNext()){
    System.out.println(interceptor.next());
    }

    }
    }

  • 相关阅读:
    VSS部署手册
    正则表达式学习(二)
    完全卸载oracle11g步骤
    c#中 命令copy 已退出,返回值为1
    Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案
    ora01033和ora12560错误的解决方案
    C#DLL加密保护
    ocslive.conf
    ASP.NET中文乱码问题的解决
    Creating a very simple autorestore USB stick clonezilla
  • 原文地址:https://www.cnblogs.com/wwzyy/p/5539404.html
Copyright © 2011-2022 走看看