现在的位置: 首页 > 综合 > 正文

java Comparable和Comparator

2013年10月01日 ⁄ 综合 ⁄ 共 1277字 ⁄ 字号 评论关闭

Comparable 用作默认的比较方式;Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用。 

像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。 

sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系;sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系。

package com.basic.compare;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ObjectCompare {
	public static void main(String args[]) {
		ArrayList<User> list = new ArrayList<User>();
		list.add(new User(20,"li"));
		list.add(new User(22,"wang"));
		list.add(new User(21,"zhang"));
		
		Collections.sort(list);
		// Collections.sort(list, new UserCmp());
		
		for (int i = 0; i < list.size(); ++i) {
			System.out.println(list.get(i).getAge() + " " + list.get(i).getName());
		}
	}
}

class User implements Comparable<Object> {
	int age;
	String name;

	User(int age, String name) {
		this.age = age;
		this.name = name;
	}
	
	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		return this.age - ((User)o).getAge();
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

class UserCmp implements Comparator<Object> {

	@Override
	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		return ((User)o2).getAge() - ((User)o1).getAge();
	}
}

抱歉!评论已关闭.