• 常用的比较器:实现方式Compareable和Comparator


    class Dog{  
        int size;  
        int weight;  
       
        public Dog(int s, int w){  
            size = s;  
            weight = w;   
        }  
    }  
       

    目的:对于Dog对象作为元素所组成的数组进行对象属性的自定义排序

    一、外部比较器 Comparator:优点是不对源代码造成影响

    class DogSizeComparator implements Comparator<Dog>{  
       
        @Override  
        public int compare(Dog o1, Dog o2) {  
            return o1.size - o2.size;  
        }  
    } 
    
    
    public class ArraySort {  
       
        public static void main(String[] args) {  
            Dog d1 = new Dog(2, 50);  
            Dog d2 = new Dog(1, 30);  
            Dog d3 = new Dog(3, 40);  
       
            Dog[] dogArray = {d1, d2, d3};  
            printDogs(dogArray);   
            Arrays.sort(dogArray, new DogSizeComparator());     
            printDogs(dogArray);  
        }  
       
        public static void printDogs(Dog[] dogs){  
            for(Dog d: dogs)  
                System.out.print("size="+d.size + " weight=" + d.weight + " ");  
       
            System.out.println();  
        }  
    }  

      1、编写一个外部比较器:实现Comparator泛型为需要排序对象的类,并重写

    compare(Dog o1, Dog o2)方法,如果进行正序的排序,那返回值为o1.属性-o2.属性,属性为根据此排序的参考

      2、通过Arrays.sort(dogArray, new DogSizeComparator());参数为需要排序的对象的数组和对应比较器,进行排序

    二、内部比较器Compareable:对象所属的类需要实现Compareable接口

      

    public class Person implements Comparable<Person>
    {
        String name;
        int age;
        public Person(String name, int age)
        {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName()
        {
            return name;
        }
        public int getAge()
        {
            return age;
        }
        @Override
        public int compareTo(Person p)
        {
            return this.age-p.getAge();
        }
        public static void main(String[] args)
        {
            Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
            System.out.println("排序前");
            for (Person person : people)
            {
                System.out.print(person.getName()+":"+person.getAge());
            }
            Arrays.sort(people);
            System.out.println("
    排序后");
            for (Person person : people)
            {
                System.out.print(person.getName()+":"+person.getAge());
            }
        }
    }

      1所需要排序数组的元素对象所属的类 必须要实现Compareable接口并重写 compareTo()方法 正序返回this.属性-参数对象.属性 反序则取反。

      2对于该对象的数组使用Arrays.sort(people)进行排序

  • 相关阅读:
    Day 12:枚举值、枚举类
    Day 11:静态导入、增强for循环、可变参数的自动装箱与拆箱
    Day 10:浅谈正则表达式
    Day 9:双列集合Map及实现该接口的类的常用方法
    Day 8:方法上自定义泛型、类上、接口上、泛型的上下限
    Day 7:TreeSet
    Day 6:Vector类和实现Hashset以及登录窗口的模拟
    Day 5 :ArrayList原理、LinkedList原理和方法和迭代器注意事项
    Day 4:集合——迭代器与List接口
    Day 3:集合
  • 原文地址:https://www.cnblogs.com/YangJM/p/7670235.html
Copyright © 2020-2023  润新知