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());
}
}
}
- Compator/Comparable的比较
- java Compator的用法总结
- Comparable(比较的类内)
- Comparable与Comparator的比较
- Comparable和Comparator的比较
- 常用的比较器 Comparable
- Comparable与Comparator的比较
- Comparable与Comparator的比较
- Comparable和Comparator的比较
- Java中Comparable和Comparator的比较
- 对象的比较Comparable与Comparator
- Java中的Comparable和Comparator的比较
- Comparable和Comparator的比较用法
- 比较器comparable和comparator的区别
- 比较器的简单应用(Comparable接口)
- Java的比较接口 Comparable与Comparator
- Java的Comparable接口&比较器原理
- 对象的比较comparable与comparator
- Cocos2d-x 3.x的渲染流程
- rsync命令详解
- Proxy、SSH 和VPN 的区别
- 2014腾讯笔试题
- NGUI系列教程 第二部
- Compator/Comparable的比较
- iis服务器:[1]支持任意扩展名和扩展名的下载
- 最近我的数据库的一个用户经常被锁,想问一下原因
- 性能测试服务-PTS使用说明
- Unity3D Shader官方教程翻译(六)----Shader语法:Pass的Color, Material, Lighting
- 一步步调试解决iOS内存泄漏
- 自定义报表完全解读
- 算法题解析
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing