2021-07-24

java比较器

Java比较器

  • 在 Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。
  • Java实现对象排序的方式有两种
    • 自然排序:java.lang.Comparable
    • 定制排序:java.util.Comparator

方式一:自然排序 java.lang.Comparable

  • Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
  • 实现 compareTo(Object obj) 方法的返回值来比较大小。如果
    当前对象 this大于形参 obj,则返回正整数,如果当前对象 this小于形参 obj,则返回负整数,
    如果当前对象 thsi等于形参对象 obj,则返回零。
  • 实现 Comparable接口的对象列表【和数组】可以通过 Collections.sort或 Arrays.sort
    进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
  • 对于类 C的每一个 e1和 e2来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2)
    具有相同的 boolean值时,类 C的自然排序才叫做 equals一致。建议【虽然不是必需的】
    最好使用自然排序与 equals一致。

Comparable 的典型实现:【默认都是从小到大排列的】

  • String 按照字符串中字符的 Unicode值进行比较。
  • Character 按照字符的 Unicode值来进行比较
    数组类型对应的包装类以及 BigLnteger,BigDecimal 按照他们对应的数值
    大小进行比较
  • Boolean:true 对应的包装类实例大于 false对应的包装类实例
  • Date,Time等:后面的日期时间比前面的日期时间大
class Goods implements Comparable{	private String name;	private double price;	//按照价格 比较商品的大小	@Overide	public int compareTo(Object o){		//不能写成 this instanceof o		//和 o instanceof this		if(o instanceof Goods){		Goods other = (Goods)o;			if(this.price > other.price){				return 1;			}else if(this.price < other.price){				return -1;			}			return 0;		}		throw new RuntimeException("输入的数据类型不一样");	}	//略 构造器 get set toString 方法}public class Test { @org.junit.Test public void test1() {  Goods[] all = new Goods[4];  all[0] = new Goods("<aa>", 100);  all[1] = new Goods("<bb>", 50);  all[2] = new Goods("<cc>", 399);  all[3] = new Goods("<dd>", 200);  Arrays.sort(all);  //从小到大  Arrays.stream(all).forEach(System.out::print); }}

定制排序:java.util.Comparator

No comments:

Post a Comment