Compator/Comparable的比较

Compator和Comparable都可以用于集合或者数组的排序。


Comparable主要用于对象内部的比较方式,实现接口:


/** 
 * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。  
 */  
int compareTo(Object o);  


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


/** 
 * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。 
 */  
int compare(Object o1, Object o2); 

一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。 
像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。 
sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系 
sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系。


下面我们来看一下Compator和Comparable的使用实例:
一、Comparator
import java.util.Arrays;
import java.util.Comparator;


public class SampleCompartor {
public static void main(String[] args) {
String[] array = new String[] { "BCD", "ABC", "Cdb" };
Arrays.sort(array, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});

for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
二、Comparable
原始类:
public class User {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
改造后按照age排序:
public class User implements Comparable{
private String id;
private String name;
private int age;

public User(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
return this.age - ((User) o).getAge(); 
}
}


import java.util.Arrays;

public class SampleComparable {
public static void main(String[] args) {
User[] users = new User[] { new User("a","name1", 30), new User("b","name2", 20),new User("c","name3", 25) };  
   Arrays.sort(users);  
   for (int i = 0; i < users.length; i++) {  
     User user = users[i];  
     System.out.println(user.getId() + " " + user.getAge());  
   } 
}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值