java中Comparable和Comparator的区别

首先Comparable和Comparator两个都是interface, Comparable位于java.lang包,Comparator位于java.util
二者都是用来数组或者集合的排序来使用的。

Comparable主要是使对象具备一种自比较的能力,而Comparator可能是对象成为一种比较器,对比较算法的一种封装,是一种策略模式。
在调用 Arrays.sort时如果排序的对象没有实现Comparable接口则需要为其指定Comparator否者会抛出ClassCastException
在调用Collections.sort时如果排序的对象没有实现Comparable接口则需要为其指定Comparator则会编译出错象没有实现Comparable接口则需要为其指定Comparator否则会编译出错

以下是java代码
package com.iteye;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Test {
	public static void main(String[] args) {
		Random rd = new Random();
		Integer[] its = new Integer[20];
		for (int i = 0; i < its.length; i++) {
			its[i] = rd.nextInt() % 100;
		}
		
		System.out.println(Arrays.asList(its));
		Arrays.sort(its);
		System.out.println(Arrays.asList(its));

		Arrays.sort(its, new AbsComparator());
		System.out.println(Arrays.asList(its));
		
		Cat[] cats = new Cat[4];
		cats[2] = new Cat(0L,"Cat0");
		cats[1] = new Cat(1L,"Cat1");
		cats[0] = new Cat(2L,"Cat2");
		cats[3] = new Cat(3L,"Cat3");
		System.out.println(Arrays.asList(cats));
		//Arrays.sort(cats);抛出ClassCastException
		Arrays.sort(cats,new CatComparator());
		System.out.println(Arrays.asList(cats));
		
		List<Person> persons = new ArrayList<Person>();
		//Collections.sort(persons);//编译错误
	}
}

你可能感兴趣的:(comparator)