`
zeyuphoenix
  • 浏览: 55723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

收集面试题(二十八)(关于Comparator和Comparable的比较)

阅读更多
/**
 * 一个自定义对象,比较用
 */
public class User {

	private String id;
	private int age;

	public User(String id, int age) {
		this.id = id;
		this.age = age;
	}

	public int getAge() {
		return age;
	}

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

	public String getId() {
		return id;
	}

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

}

 

import java.util.Arrays;

/**
 * 强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过<br/>
 * Collections.sort或Arrays.sort进行自动排序。
 */
public class SimpleComparable implements Comparable<Object> {

	/**
	 * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
	 */
	@Override
	public int compareTo(Object o) {
		return this.age - ((SimpleComparable) o).getAge();
	}

	private String id;
	private int age;

	public SimpleComparable(String id, int age) {
		this.id = id;
		this.age = age;
	}

	public int getAge() {
		return age;
	}

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

	public String getId() {
		return id;
	}

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

	/**
	 * 测试方法
	 */
	public static void main(String[] args) {
		SimpleComparable[] users = new SimpleComparable[] {
				new SimpleComparable("a", 30), new SimpleComparable("b", 20) };
		Arrays.sort(users);
		for (int i = 0; i < users.length; i++) {
			SimpleComparable user = users[i];
			System.out.println(user.getId() + " " + user.getAge());
		}
	}
}

 

import java.util.Arrays;
import java.util.Comparator;

/**
 * 本例子是为了和SimpleComparable比较用<br/>
 * (1)、Comparator 是不对排序对象本身做修改<br/>
 * (2)、Comparable 则需要排序对象是实现<br/>
 * 一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象<br/>
 * 组成的集合就可以直接使用sort方法排序。<br/.
 * Comparator可以看成一种算法的实现,将算法和数据分离,Comparator在下面两种环境下使用:
 * (1)、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现<br/>
 * 排序而不必改变对象本身 <br/>
 * (2)、可以使用多种排序标准,比如升序、降序等
 */
public class SimpleComparator implements Comparator<Object> {

	/**
	 * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
	 */
	@Override
	public int compare(Object o1, Object o2) {
		return ((User) o1).getAge() - ((User) o2).getAge();
	}

	/**
	 * 强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给<br/>
	 * Collections.sort或Arrays.sort。
	 */
	public static void main(String[] args) {
		User[] users = new User[] { new User("a", 30), new User("b", 20) };
		Arrays.sort(users, new SimpleComparator());
		for (int i = 0; i < users.length; i++) {
			User user = users[i];
			System.out.println(user.getId() + " " + user.getAge());
		}
	}

}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics