六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 27|回复: 0

Java中Comparable和Comparator实现对象比较

[复制链接]

升级  50%

5

主题

5

主题

5

主题

童生

Rank: 1

积分
25
 楼主| 发表于 2013-2-3 10:56:03 | 显示全部楼层 |阅读模式
★  Java知识点汇总 
全球软件项目外包平台 兼职做外包 挣Money!
   
 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。下面通过两个例子分别用Comparable和Comparator实现对User对象中年龄排序。
 
1.通过实现Comparable接口,根据User的年龄进行排序。
 
import java.util.Arrays;/** * @author pengcqu *  */public class ComparableUser implements Comparable {private String id;private int age;public ComparableUser(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 int compareTo(Object o) {return this.age - ((ComparableUser) o).getAge();}/** * 测试方法 */public static void main(String[] args) {ComparableUser[] users = new ComparableUser[] {new ComparableUser("u1001", 25),new ComparableUser("u1002", 20),new ComparableUser("u1003", 21) };Arrays.sort(users);for (int i = 0; i < users.length; i++) {ComparableUser user = users;System.out.println(user.getId() + " " + user.getAge());}}} 
 
2. 通过实现Comparator接口,根据User的年龄进行排序。
 
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;import java.util.Comparator;/** * @author pengcqu *  */public class UserComparator implements Comparator {public int compare(Object arg0, Object arg1) {return ((User) arg0).getAge() - ((User) arg1).getAge();}/** * 测试方法 */public static void main(String[] args) {User[] users = new User[] { new User("u1001", 25),new User("u1002", 20), new User("u1003", 21) };Arrays.sort(users, new UserComparator());for (int i = 0; i < users.length; i++) {User user = users;System.out.println(user.getId() + " " + user.getAge());}}} 
选择Comparable接口还是Comparator?
 一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等。
 
 

相关链接:


★  Java基础知识点汇总 
★ 【下载】经典常用算法 Java和C语言两种实现(含代码图例)
【下载】Java各种排序算法实现(含代码)
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表