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

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

程序员文章站 2022-03-04 17:25:03
...

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()方法是一个参数的那个

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


2.compareTo()方法

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

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

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

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

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

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

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

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


3.Comparator接口和Comparable接口比较

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

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

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

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

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

 

相关标签: Java