关于Comparable与Comparator的区别

Comparable接口的特点:

1. 在内部实现,进行比较;

2. 需要实现的方法 public int compareTo(Obj o);

3. 数组排序时直接调用Collections.sort()方法;

以下是Comparable接口实现的排序

首先定义学生类,实现Comparable接口:

package test;

public class Student implements Comparable{
private int id;
public Student(int age,String name,String birth){
	this.age=age;
	this.name=name;
	this.birth=birth;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
private int age;
private String name;
private String birth;
public String getBirth() {
	return birth;
}
public void setBirth(String birth) {
	this.birth = birth;
}
@Override
public int compareTo(Object arg0) {
Student t=(Student) arg0;
//return t.getBirth().compareTo(this.birth);
return t.getAge()-this.age;
}

}
在最后调用了compareTo方法,然后对学生的年龄进行比较,此方法使用的是按年龄倒序排列,如果要比较出生日期,则把返回值替换成注释代码即可。之后在主函数调用sort()函数,如下

package test;

import java.util.ArrayList;

import java.util.Collections;
import java.util.List;

public class compare1 {

	public static void main(String[] args) {
		List<Student> list=new ArrayList<Student>();
		Student t1=new Student(10,"zz","19940524");
		Student t2=new Student(11, "zxy", "19931030");
		Student t3=new Student(12, "fx", "19940120");
		list.add(t1);
		list.add(t2);
		list.add(t3);
		Collections.sort(list);
		for(int i=0;i<list.size();i++){
			Student t=list.get(i);
			System.out.println(t.getAge());
		}
	}

}
输出结果:

12
11
10

Comparator方法的特点:

1. 外部编写的比较器

2. 实现接口,需要重新改写public int compare(obj o1,obj o2)方法

3. 调用Collections.sort(list,sort.class)

具体实现方法如下图,首先建立Student实体,不需要实现接口

package test;

public class Student{
private int id;
public Student(int age,String name,String birth){
	this.age=age;
	this.name=name;
	this.birth=birth;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
private int age;
private String name;
private String birth;
public String getBirth() {
	return birth;
}
public void setBirth(String birth) {
	this.birth = birth;
}

}
建立完实体表后,重新建一个类去实现Comparator接口,改写compare方法,如下

import java.util.Comparator;

public class sortclass implements Comparator {

	public int compare(Object o1, Object o2) {
		// TODO Auto-generated method stub
		Student s1=(Student) o1;
		Student s2=(Student) o2;
		int f=s2.getBirth().compareTo(s1.getBirth());
		return f;
	}
}
在这里是按照学生的出生日期的降序排列,最后在main函数调用方法

package test;

import java.util.ArrayList;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class Compare {

	public static void main(String[] args) {
		List<Student> list=new ArrayList<Student>();
		Student t1=new Student(10,"zz","19940524");
		Student t2=new Student(11, "zxy", "19931030");
		Student t3=new Student(12, "fx", "19940120");
		list.add(t1);
		list.add(t2);
		list.add(t3);
		sortclass sort=new sortclass();
		Collections.sort(list,sort);
		for(int i=0;i<list.size();i++){
			Student t=list.get(i);
			System.out.println(t.getBirth());
		}

	}

}


输出结果:

19940524
19940120
19931030






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值