集合排序。。。。。。。。。。。。。。。。。。。。

Comparable & Comparator 都是用来实现集合中元素的比较、排序的;
Comparable 是在集合内部定义的方法实现的排序,
Comparator 是在集合外部实现的排序,
所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。

Comparable 定义

package java.lang;
import java.util.*;

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

假设我们通过 x.compareTo(y) 来“比较x和y的大小”。若返回“负数”,意味着“x比y小”;返回“零”,意味着“x等于y”;返回“正数”,意味着“x大于y”。

Comparator 策略模式(strategy design pattern)

用 Comparator 是 策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

Comparator 定义

package java.util;

public interface Comparator<T> {

    int compare(T o1, T o2);

    boolean equals(Object obj);
}

(01) 若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。

为什么可以不实现 equals(Object obj) 函数呢? 因为任何类,默认都是已经实现了equals(Object obj)的。 Java中的一切类都是继承于java.lang.Object,在Object.java中实现了equals(Object obj)函数;所以,其它所有的类也相当于都实现了该函数。

(02) int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。

Comparable 例子

package thread.comparable;

import java.util.ArrayList;
import java.util.Collections;

public class Person implements Comparable {
    private int age;
    private String name;

    public Person(String name,int age) {
        this.age = age;
        this.name = name;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof Person) {
            Person person = (Person) o;
            int result;
            result = getAge() - person.getAge();
            //result =person.getAge() -  getAge();
            return result;
        }
        return 0;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<Person>();
        list.add(new Person("ccc", 20));
        list.add(new Person("AAA", 30));
        list.add(new Person("bbb", 10));
        list.add(new Person("ddd", 40));
        // 打印list的原始序列
        System.out.printf("Original sort, list:%s\n", list);
        Collections.sort(list);
        System.out.printf("Original sort, list:%s\n", list);
    }
}

Comparator 例子

import java.util.ArrayList;
import java.util.Comparator;

public class Person {
    private int age;
    private String name;

    public Person(String name, int age) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

}

class AseAgePerson implements Comparator<Person> {


    @Override
    public int compare(Person o1, Person o2) {
        int result;
        result = o1.getAge() - o2.getAge();
        return result;
    }


}

class DescAgePerson implements Comparator<Person> {


    @Override
    public int compare(Person o1, Person o2) {
        int result;
        result = o2.getAge() - o1.getAge();
        return result;
    }


}

class Test {

    public static void main(String[] args) {
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("ccc", 20));
        list.add(new Person("AAA", 30));
        list.add(new Person("bbb", 10));
        list.add(new Person("ddd", 40));
        // 打印list的原始序列
        System.out.println(list);
        list.sort(new AseAgePerson());
        //list.sort(new DescAgePerson());
        System.out.println(list);
    }
}

sort方法:用于list排序

  • public static void sort(List list) :将集合中元素按照默认规则排序。

  • public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排序。

Comparator<? super T>:是一个接口方法  返回值是数字int 来判断怎么排

Collections.sort(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                // 将数字字符转化为数字
                int n1 = Integer.parseInt((String) o1);
                int n2 = Integer.parseInt((String) o2);
                return n1 - n2;
            }
        });
        System.out.println(list);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值