Comparable 和 Comparator的区别

在使用集合收集对象之后,如果相对对象进行排序,我们可以使用java.util.Collections中的sort()方法,因为必须有索引才能进行排序,所以Collections的sort()方法就受List操作对象。使用sort()方法只能按照它提供的排序方法对对象进行排序,如果想自己定义排序规则,可以操作java.util.Comparable中的compareTo()方法,或者java.util.Comparator接口中的compara()方法。

区别:

Comparable的compareTo()方法,必须在比较的对象内部定义重写该方法,比如String类本身有操作Comparable,进行下列排序

	List words = Arrays.asList("B", "X", "A");
	Collections.sort(words);

它会得到结果:A B X

如果此时需要进行逆序排序,则需要在String类内部重写compareTo()方法,所以使用compareTo()在一些情况下并不方便

Comparator接口中的compara()方法则没有该要求,它可以在另一个类中重写compara()方法,最后调用该类

	List> list = new ArrayList<>(map.entrySet());
	Collections.sort(list, new valueSort());
	for (int i = 0; i < list.size(); i++)
		System.out.print(list.get(i).getKey());

class valueSort implements Comparator> {

	@Override
	public int compare(Entry o1, Entry o2) {
		if ((o1.getValue() - o2.getValue()) > 0)
			return -1;
		else if ((o1.getValue() - o2.getValue() == 0)
				&& (o1.getKey().charAt(0) - o2.getKey().charAt(0) > 0))
			return -1;
		return 1;
	}
}

在类valueSort中重写了compare()方法,然后使用Collections.sort(list, new valueSort())调用该类,对list进行排序



你可能感兴趣的:(【Java集合】)