标签:
在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+""; } }
标签:
原文地址:http://www.cnblogs.com/zhisuoyu/p/5375363.html