• 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}]
        }
    }
  • 相关阅读:
    【20220606】一亩三分地
    【20220601】连岳摘抄
    【20220526】吃里扒外
    【一句日历】2022年6月
    【20220608】连岳摘抄
    【20220604】为了家人
    【20220530】人格就是路的指引
    工作感受月记202206月
    android开发Bad notification posted from package com.suyf.test: Couldn't create icon: StatusBarIcon(icon=Icon(typ=RESOURCE pkg=com.suyf.test id=0x7f0820dd) visible user=0 )解决方法
    Solution 「AGC 020F」Arcs on a Circle
  • 原文地址:https://www.cnblogs.com/DreamFather/p/14581098.html
Copyright © 2020-2023  润新知