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

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()方法


2.compareTo()方法

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

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

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

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

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

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

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

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

上一篇:C# 的 List<> 自定义排序


下一篇:BigDecimal 比较大小