【技术】实践验证:同时使用Comparable接口和Comparator自定义规则排序结果会是什么样的 ?

同时使用Comparable接口和Comparator自定义规则排序结果会是什么样的 ?

今天在整理资料的时候偶然看见这样一个问题,想来想去,应该会和CSS一样遵循就近原则,使用Comparator的排序规则,后来实际验证了一下。话不多说,直接上代码,需要一个实体类测试类
Student实体类

package com.xxx.action;

/**
 * 该实体类实现了Comparable接口,并重写了compareTo方法,指定降序的规则
 * 
 * @Package: com.xxx.action 
 * @author Peter
 * @version 1.0
 * @date 2018年12月12日 上午11:32:32
 *
 */
public class Student implements Comparable<Student>{
	private String name;
	
	Student(String name){
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int compareTo(Student o) {
		return o.getName().compareTo(this.getName());
	}

	// 为了方便看结果,重写了toString();
	@Override
	public String toString() {
		return "Student [name=" + name + "]";
	}
	
}

测试类

package com.xxx.action;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

/**
 * 采用Junit4测试。也可以使用main方法测试。
 * 
 * @Package: com.xxx.action 
 * @author Peter
 * @version 1.0
 * @date 2018年12月12日 上午9:08:20
 *
 */
public class TestList {
	@Test
	public void foreachList() {
		List<Student> list = new ArrayList<Student>();
		// 为了方便看出顺序,就不写复杂的名字了
		list.add(new Student("a"));
		list.add(new Student("c"));
		list.add(new Student("e"));
		list.add(new Student("b"));
		// 采用了1.8新特性,排序前打印一次
		list.forEach(System.out::println);
		
		// 华丽的分割线
		System.out.println("---------------------");
		
		// 通过Collections工具类中的sort方法 + Comparator自定义排序规则
		Collections.sort(list, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				// 升序
				return o1.getName().compareTo(o2.getName());
			}
		});
		
		// 排序后打印一次
		list.forEach(System.out::println);
	}
}

结果:

Student [name=a]
Student [name=c]
Student [name=e]
Student [name=b]
---------------------
Student [name=a]
Student [name=b]
Student [name=c]
Student [name=e]

结论:
同时使用同时使用Comparable接口和Comparator自定义规则排序,java会采用就近原则,使用当前测试类中的自定已排序规则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值