zoukankan      html  css  js  c++  java
  • Comparable与Comparator

    Comparable对实现它的每个类的对象进行整体排序。这个接口需要类本身去实现。若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。此外,实现 Comparable 接口的类的对象可以用作 “有序映射 ( 如 TreeMap)” 中的键或 “有序集合 (TreeSet)” 中的元素,而不需要指定比较器。

    Comparable定义:

    public interface Comparable<T> {
        public int compareTo(T o);
    }

    Comparator定义:

    public interface Comparator<T> {
        int compare(T o1, T o2);
        boolean equals(Object obj);
    }

    举例:类Person1实现了Comparable接口

    public class Person1 implements Comparable<Person1>{
        private int age;
        private String name;
    
        public Person1(String name, int age){
            this.name = name;
            this.age = age;
        }
        @Override
        public int compareTo(Person1 o){
            return this.age-o.age;
        }
        @Override 
        public String toString(){
            return name+":"+age;
        }
    }

    实现Comparable接口必须修改自身的类,即在自身类中实现接口中相应的方法。 如果我们的这个类无法修改(比如final修饰或者已经定义好),就用Comparator这个接口(策略模式)。

    List<Person2> list2 = new ArrayList<Person2>();
    Collections.sort(list2, new Comparator<Person2>(){
    
        @Override
        public int compare(Person2 o1, Person2 o2){
            if(o1 == null || o2 == null)
                return 0;
            return o1.getAge() - o2.getAge();
        }
    });

    总结:

    Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。 

  • 相关阅读:
    FCKEditor使用说明
    如何查看索引或table所佔用的實際空間
    java字节输入流
    文件的读写操作
    利用JProfiler
    javascript面向对象技术基础(五)
    深刻理解Linux进程间通信(IPC)
    JAVA中操作数据库方式与设计模式的应用 2
    javascript面向对象技术基础(六)
    FCKeditor在线编辑器
  • 原文地址:https://www.cnblogs.com/hesier/p/5889034.html
Copyright © 2011-2022 走看看