Java集合排序二:Comparable接口;compareTo()方法;Comparator接口和Comparable接口比较;

本文介绍了Java中Comparable接口的使用方法及其实现原理,包括如何通过实现Comparable接口对自定义类进行排序,以及如何使用Collections.sort()方法对实现了Comparable接口的集合进行排序。同时对比了Comparable与Comparator接口的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Comparable接口

Comparable接口:

          (1)java.lang包下的接口;

          (2)Comparable接口只有一个方法:int  compareTo(T  o)方法;

                          如: obj1.compareTo(obj2):obj1小于、等于、大于obj2时,分别返回负整数、零、正整数。

          (3)一个集合中的元素是某个自定类型,如果要多其排序,那么这个自定义类需要实现Comparable接口,并且按照业务需求,实现Comparable接口的compareTo(T  o)方法。

          (4)对于集合,其中的元素的类实现了Comparable接口的话,可以调用Collections.sort()方法完成集合的排序;

                 即如果是对集合中的自定义数据排序的话,使用Collections.sort()方法;

                 如果是对数组中的自定义数据进行排序的话,使用Arrays.sort()方法;

……………………………………………………

示例:按照价格从小到大正序排列:

Goods类:集合中存储的元素为Goods类对象;Goods类需要实现Comparable接口,并根据实际业务需要,实现Comparable接口的compareTo()方法;

GoodsTest类:测试类;

/**
 * (1)集合中存放Goods类型的对象,那么Goods类就要实现Comparable接口
 * @author Administrator
 *
 */
public class Goods implements Comparable<Goods> {

	private String id;
	private String name;
	private double price;
	
	public Goods(){}
	public Goods(String id,String name,double price){
		this.id = id;
		this.name = name;
		this.price = price;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	
	@Override
	public String toString(){
		return "编号:"+id+"名称:"+name+"价格:"+price;
	}
	
	// 根据业务要求,实现Comparable接口中的compareTo()方法
	@Override
	public int compareTo(Goods arg0) {
		
		double price1 = this.getPrice();
		double price2 = arg0.getPrice();
		double diff = price1 - price2;// 根据价格升序排列
		if(diff >0){    
			return 1;
		}else if(diff == 0){
			return 0;
		}else{
			return -1;
		}
		
	}

}
public class GoodsTest {

	public static void main(String[] args) {
		
		Goods g1 = new Goods("s0001","手机",2000);
		Goods g2 = new Goods("s0002","冰箱",5000);
		Goods g3 = new Goods("s0003","电视机",3000);
		ArrayList<Goods> list = new ArrayList<Goods>();
		list.add(g1);
		list.add(g2);
		list.add(g3);
		System.out.println("排序前:");
		for(Goods good:list){
			System.out.println(good);
		}
		Collections.sort(list);    // 调用方法进行集合排序
		System.out.println("排序后:");
		for(Goods good:list){
			System.out.println(good);
		}

	}

}

注:此时调用的sort()方法是一个参数的那个


2.compareTo()方法

可以看到,在使用Comparable接口的时候,接口的实现类实现了compareTo()方法;即这个方法是Comparable接口的compareTo()方法;

其实,对于基本数据类型的包装类,字符串类也都有compareTo()方法

          (1)基本数据类型包装类的compareTo()方法就是比较大小的:

……………………………………………………

          (2)String类的compareTo()方法,是挨个比较字符串中每个字符的Unicode值;全相等就返回0;挨个比较后,遇到小于的了就返回负数,遇到大的了就返回整数。


3.Comparator接口和Comparable接口比较

这儿都是重复阐述,看一下就行

具体在实际应用那种,选择哪种,或二者如何结合使用,需要慢慢积累。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值