美文网首页
Comparable 和 Comparator比较

Comparable 和 Comparator比较

作者: 艾尔温 | 来源:发表于2016-11-22 15:00 被阅读0次

对集合或数组进行排序有两种方法:
1.集合中的对象所属的类实现了java.lang.Comparable 接口,然后调用Collections.sort()或者Arrays.sort()
2.实现java.lang.Comparator接口,把这个实现接口的类作为参数传递给上述的sort()方法。

1、Comparable<T> java.lang Interface Comparable<T>
属于Java集合框架下的一个接口。它只有一个方法 int compareTo(T o) 用于提供排序所需要的比较逻辑。实现这个接口的类,其对象都可以通过调用Collections.sort()或者Arrays.sort()进行排序,根据compareTo的逻辑升序排列。

class Person implements Comparable<Person>{
    String name;
    public Person(String name) {
        this.name = name;
    } 

    public int compareTo(Person other) {
        //按名字的字母顺序从z~a排    
        if(name.compareTo(other.name) < 0)  //当前的字符串,在比较字符串之前,那就返回1
            return 1;
        else
            if(name.compareTo(other.name) > 0)
                return -1;
            else
                return 0;
    }
}

2、再来看Comparator<T> java.util Interface Comparator<T>
简单来说,Comparator是策略模式的一种实现,体现了将类和排序算法相分离的原则。

class ComparatorImp implements Comparator<Person>{
    public int compare(Person p1, Person p2)    {
        if(p1.name.compareTo(p2.name) < 0)
            return -1;
        else
            return (p1.name.compareTo(p2.name) > 0) ? 1 : 0;
    }
}

测试

public class TestComparable {
    public static void main(String[] args) {
        Person[] aPersons = new Person[4];
        aPersons[0] = new Person("Jony");
        aPersons[1] = new Person("Pun");
        aPersons[2] = new Person("HelloKitty");
        aPersons[3] = new Person("Brown");

        Arrays.sort(aPersons);
        for(Person p: aPersons )    {
            System.out.print(p.name + " ");
        }

        System.out.println();
        Arrays.sort(aPersons, new ComparatorImp());
        for(Person p: aPersons )    {
            System.out.print(p.name + " ");
        }
        System.out.println();

        List<Person> lperson = new LinkedList<Person>();
        for(Person p : aPersons) {
            lperson.add(p);
        }
        Collections.sort(lperson);
        for(int i = 0 ; i < lperson.size(); i++)        {
            System.out.print(lperson.get(i).name+ " ");
        }

    }
}

相关文章

网友评论

      本文标题:Comparable 和 Comparator比较

      本文链接:https://www.haomeiwen.com/subject/xngppttx.html