Compator/Comparable的比较

来源:互联网 发布:小数据时代的随机采样 编辑:程序博客网 时间:2024/05/17 07:56

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());  
   } 
}
}

0 0
原创粉丝点击