zoukankan      html  css  js  c++  java
  • Java中Comparator、Comparable的比较功能

    Comarable和Comparator都是用来实现集合中元素的比较、排序的,Comparable是在集合内部定义的方法实现排序,Comparator是在集合外部实现的排序,Comparable位于java.lang包,Comparator位于java.util包。

    Comparable:

    当前类小于参数返回负数,等于返回0,大于返回正数。

    class Person implements Comparable<Person>{
        String name;
        int age;
        Person(String n, int a) {
            name = n;
            age = a;
        }
    
        @Override
        public int compareTo(Person person) {
            return name.compareTo(person.name);
        }
    }
    ArrayList<Person> list = new ArrayList<Person>();
    list.add(new Person("aaa", 10));
    list.add(new Person("bbb", 20));
    list.add(new Person("ccc", 30));
    Collections.sort(list); //这里会自动调用Person中重写的compareTo方法。

    Comparator:

    可以通过两种方式实现自定义排序

    1.定义一个类实现Comparator接口,重写compare方法。

    2.语法不同,在内部new这个接口并重写compare方法。

    第一个参数小于第二个参数返回负数,相等返回0,大于返回正数。

    class Person {
        String name;
        int age;
        Person(String n, int a) {
            name = n;
            age = a;
        }
    }
    class DemoComparator implements Comparator<Person> {
        @Override
        public int compare(Person a, Person b) {
            return a.name.compareToIgnoreCase(b.name);
        }
    }
    class Demo {
        public static void main(String[] args) {
            List<Person> persons = Arrays.asList(
                new Person("Joe", 24),
                new Person("Pete", 18),
                new Person("Chris", 21)
            );
            Collections.sort(persons, new DemoComparator());
            System.out.println(persons);
            //[{name=Chris, age=21}, {name=Joe, age=24}, {name=Pete, age=18}]
            Collections.sort(persons, new Comparator<Person>() {
                @Override
                public int compare(Person a, Person b) {
                    return a.age < b.age ? -1 : a.age == b.age ? 0 : 1;
                }
            });
            System.out.println(persons);
            //[{name=Pete, age=18}, {name=Chris, age=21}, {name=Joe, age=24}]
        }
    }
  • 相关阅读:
    第一次个人编程作业
    第一次软工作业
    [Manacher]最长回文子串
    面向对象程序设计 总结作业
    面向对象程序设计 小黄衫晒单
    面向对象程序设计 作业三
    面向对象程序设计 作业二
    面向对象程序设计 作业一
    SSD/Memory技术学习拼图
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/DreamFather/p/14581098.html
Copyright © 2011-2022 走看看