欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Comparable和 Comparator的区别

程序员文章站 2022-05-22 14:03:47
...

简介

Comparable和 Comparator都是java.util包下的两个接口
Comparable在类内使用
Comparator单独使用

1、Comparable

## 描述
Comparable是一个接口,通过类继承该接口,重写compareTo方法的实现比较,
compareTo的返回值为int,有三种情况:

  1. Other > this: return 正整数
  2. Other = this:return 0
  3. Other < this: return 负整数
    例如:

compareTo方法的重写:

@Override
	public int compareTo(Person o) {
		// TODO Auto-generated method stub
		//比较名字长度,优先
		int num = this.name.length() - o.name.length();
		//比较年龄
		int num1 = num==0?this.age - o.age:num;
		return num1;
	}

test类

List<Person> list = new ArrayList<>();
		Person person;
		for(int i=0;i<30;i++) {
			person = new Person("person"+i, 10-i);
			list.add(person);
		}
		//打乱顺序,测试sort
		Collections.shuffle(list);
		Collections.sort(list);
		
		for(Person ps:list) {
			System.out.println(ps);
		}

输出:
Comparable和 Comparator的区别

2、Comparator

描述
Comparator独立的比较器,当设计类时,没有考虑到比较器,后面想使用时,可以定义。
例如:
Comparator比较器,继承于接口java.util.Comparator

public class Comparator implements java.util.Comparator<Person> {

	@Override
	public int compare(Person o1, Person o2) {
		// TODO Auto-generated method stub
		int num = o1.getName().length() - o2.getName().length();
		int num1 = num==0?o1.getAge() - o2.getAge():num;
		return num1;
	}
}

测试:

List<Person> list = new ArrayList<>();
		Person person;
		for (int i = 0; i< 30; i++) {
        	person = new Person("person"+i, 30-i);
            list.add(person);
        }
		Collections.sort(list, new Comparator());
		for(Person ps:list) {
			System.out.println(ps);
		}

输出:
Comparable和 Comparator的区别
3、Collections工具类
Collections提供以下方法对List进行操作

void reverse(List list):反转

void shuffle(List list),随机排序

void sort(List list),按自然排序的升序排序

void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑

void swap(List list, int i , int j),交换两个索引位置的元素

void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。