两种比较器的使用

今天发现Java中有两种比较器,原来之前一直是用的util包的比较器,还有一个lang包的比较器没用过,就试了一下。

其实这两个比较器的内部原理都是归并排序算法,故具有稳定性,并且时间复杂度可以达到O(N*logN)

使用方法其实也差不了多少,不过我觉得util包的更为简便好用

1java.util.Comparator<T>

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
public class UtilComparator {
	public static class Student{
		private String name;
		private int id;
		private int age;
		public Student(String name,int id,int age){
			this.name = name;
			this.id = id;
			this.age = age;
		}
		public String toString(){
			return "id="+id+","+name+","+age;
		}
		public int getAge() {
			return age;
		}
	}
	//util包的比较器
	//比较器具有稳定性
	public static class ageComparator implements Comparator<Student>{
		@Override
		public int compare(Student o1, Student o2) {
			return o1.age-o2.age;//正数就交换(这里也就是o1大就交换,就是从小到大了)
		}
	}
	public static void printObj(Object obj[]){
		for (Object object : obj) {
			System.out.println(object);
		}
	}
	public static void main(String[] args) {
		Student []students = new Student[10];
		for (int i = 0; i < students.length; i++) {
			students[i] = new Student("Jack"+i, i, new Random().nextInt(50)+10);
		}
		Arrays.sort(students,new ageComparator());
		printObj(students);
	}
}

2.java.lang.Comparable<T>

import java.util.Arrays;
import java.util.Random;
public class LangCompatator {
	public static void main(String[] args) {		
		Student2 []students = new Student2[10];
		for (int i = 0; i < students.length; i++) {
			students[i] = new Student2("Jack"+i, i, new Random().nextInt(50)+10);
		}
		Arrays.sort(students);
		printObj(students);
	}
	public static void printObj(Object obj[]){
		for (Object object : obj) {
			System.out.println(object);
		}
	}
}
//使用lang包的比较器
//比较器具有稳定性
class Student2 implements Comparable<Student2>{
	private String name;
	private int id;
	private int age;
	public Student2(String name,int id,int age){
		this.name = name;
		this.id = id;
		this.age = age;
	}
	public String toString(){
		return "id="+id+","+name+","+age;
	}
	public int getAge() {
		return age;
	}
	@Override
	public int compareTo(Student2 o) {
		return this.getAge()-o.age;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值