码迷,mamicode.com
首页 > 编程语言 > 详细

java Comparable和Comparator

时间:2016-04-10 21:17:07      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

在java数组、Collection和Map的排序中,经常会用到Comparable和Comparator这两个接口。

1、Comparable

我们可以通过Arrays.sort()方法给数组排序:

    public static void main(String[] args) {
        int[] intArr={1,5,7,6,3,4};
        Arrays.sort(intArr);
        System.out.println(Arrays.toString(intArr));
        /*
        output:
            [1, 3, 4, 5, 6, 7]
        */
    }

Arrays就是通过将数组中的对象转型为Comparable,再通过compareTo方法进行大小比较的,

如果是我们自定义的类型数组,就需要实现Comparable接口才可以通过这个方法进行排序。

2、Comparator

Comparable的局限也十分明显,当我们需要另一种规则进行排序或者倒序排序,通过Comparable无法实现,但是通过Comparator接口,我们可以很容易解决这个问题。

相比于Comparable是在类的内部实现,Comparator是在外部实现,不对原类造成任何影响,所以灵活许多。

例如在TreeMap中,我们可以根据需求创建Comparator来确定排序方式:

public class Test {
    public static void main(String[] args) {
        Comparator<Person> comparator = new Comparator<Person>() {

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

        };
        Map<Person, String> map = new TreeMap<>(comparator);
        map.put(new Person(1), "first");
        map.put(new Person(2), "second");
        map.put(new Person(4), "third");
        map.put(new Person(3), "fourth");
        iterate(map);
        /*
        output:
            key:1;value:first
            key:2;value:second
            key:3;value:fourth
            key:4;value:third
        */
    }
    public static <K,V> void iterate(Map<K,V> map){
        for(Entry<K, V>  entry:map.entrySet()){
            System.out.println("key:"+entry.getKey()+";value:"+entry.getValue());
        }
    }
}

class Person{
    
    private int id;

    public Person(int id) {
        this.id = id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return id+"";
    }


}

 

java Comparable和Comparator

标签:

原文地址:http://www.cnblogs.com/zhisuoyu/p/5375363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!