关于Comparator和Comparable实际使用区别的总结(目前只讨论了数组排序,其他容器的排序尚未研究,有待补充)

1.使用Comparator需要import java.util.Comparator,而Comparable不需要import任何东西;

2.使用Comparator必须单独给他造一个类,实现一个形如public int compare(Object o1,Object o2){}的函数,

使用Comparable需要在用到比较器的类中实现该接口,即实现一个形如public int compareTo(Object o){}的函数,可以很明显的看出Comparator是从外面传进来两个参互相比,Comparable是从外面传进来一个参和自己比;

3.使用Comparator需要在排序的类里Arrays.sort(List,new YourComparator())(这里的List指的是要排序的数组,YourComparator泛指自己定义的比较器),甚至可以直接在new的时候实现,这样就不用另造一个类了,例如:

 Arrays.sort(list, new Comparator<Object>(){
                @Override
                public int compare(Object o1, Object o2) {
                    //内容
                }
            });

使用Comparable需要在排序的类里Arrays.sort(List)一下,例如:

import java.util.Scanner;
import java.util.Arrays;
//import java.util.Comparator;
 class Stu implements Comparable<Stu> {
	int a;
	int b;
	int c;
	Stu(int a,int b,int c){
		this.a=a;
		this.b=b;
		this.c=c;
	}
	@Override
	public int compareTo(Stu o) {
		// TODO Auto-generated method stub
		return this.a>o.a?1:(this.a==o.a?0:-1);//三个数但只以a为标准
	}
	
	
}
public class Main{
	public  static void main(String args[]) {
		Stu[] m=new Stu[3];
		m[0]=new Stu(4,2,3);
		m[1]=new Stu(2,3,1);
		m[2]=new Stu(1,5,1);
		Arrays.sort(m);
		
		for(int i=0;i<3;i++) {
			System.out.println(m[i].a+" "+m[i].b+" "+m[i].c+"\n");
		}
	}
}

//前面两段可以直接合成一段:
/*
public class Main implements Comparable<Main> {
	int a;
	int b;
	int c;
	Main(int a,int b,int c){
		this.a=a;
		this.b=b;
		this.c=c;
	}
	@Override
	public int compareTo(Main o) {
		// TODO Auto-generated method stub
		return this.a>o.a?1:(this.a==o.a?0:-1);//三个数但只以a为标准
	}
	public  static void main(String args[]) {
		Main[] m=new Main[3];
		m[0]=new Main(4,2,3);
		m[1]=new Main(2,3,1);
		m[2]=new Main(1,5,1);
		Arrays.sort(m);
		
		for(int i=0;i<3;i++) {
			System.out.println(m[i].a+" "+m[i].b+" "+m[i].c+"\n");
		}
	}
	
}
*/

4.用法上的不同我大概就总结出来以上几点,选择的时候个人觉得用Comparator比较好,因为Comparable能做的他都能做,Comparable不能做的(比如用不同的方式对同一个类进行排序)他也能做(多定义几种不同的YourComparator呗),除了可能麻烦点要单独构造类,但是函数不还比Comparable少写俩字母(To)么,而且从程序设计的角度来看,Comparator降低了比较器和类的耦合度,不至于说我比较器错了或者要更新改进就要去类那里改。

ps:以上均为个人理解,欢迎指正。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值