Java比较器
Posted 巧克力爱王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java比较器相关的知识,希望对你有一定的参考价值。
Java 实现对象排序的方式有两种: ① 自然排序: java.lang.Comparable ② 定制排序: java.util.Comparator 方式一:自然排序: java.lang.Comparable Comparable 接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。 实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。 如果当前对象 this 大于形参对象obj ,则返回正整数,如果当前对象 this 小于形参对象 obj ,则返回负整数,如果当前对象this 等于形参对象 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 值来进行比较 数值类型对应的包装类以及 BigInteger 、 BigDecimal :按照它们对应的数值大小进行比较 Boolean : true 对应的包装类实例大于 false 对应的包装类实例 Date 、 Time 等:后面的日期时间比前面的日期时间大//在实现了Comparable接口的类Goods中重写的compareTo方法
@Override
public int compareTo(Object o)
if(o instanceof Goods)
Goods goods = (Goods) o;
if(this.price > goods.price)
return 1;
else if(this.price < goods.price)
return -1;
else
return this.name.compareTo(goods.name);
// return Double.compare(this.price,goods.price);
throw new RuntimeException("输入类型不对");
/*
实现comparable接口测试
*/
@Test
public void test1()
Goods[] goods= new Goods[5];
goods[0] = new Goods("lenovo",45);
goods[1] = new Goods("Xiaomi",20);
goods[2] = new Goods("Huawei",45);
goods[3] = new Goods("Dell",60);
goods[4] = new Goods("logi",40);
Arrays.sort(goods);
System.out.println(Arrays.toString(goods));
方式二:定制排序:
java.util.Comparator
当元素的类型没有实现
java.lang.Comparable
接口而又不方便修改代码,
或者实现了
java.lang.Comparable
接口的排序规则不适合当前的操作,那
么可以考虑使用
Comparator
的对
象来排序
,强行对多个对象进行整体排序的比较。
重写
compare(Object o1,Object o2)
方法,比较
o1
和
o2
的大小:
如果方法返
回正整数,则表示
o1
大
于
o2
;如果返回
0
,表示相等;返回负整数,表示
o1
小于
o2
。
可以将
Comparator
传递给
sort
方法(如
Collections.sort
或
Arrays.sort
),从而允许在排序顺序
上实现精确控制。
还可以使用
Comparator
来控制某些数据结构(如有序
set
或有序映射)的顺序,或者为那些没有
自然顺序的对象 collection 提供排序。
/*
comparator类 实现定制排序
*/
@Test
public void test2()
String[] arr = new String[]"aa","ff","cc","ee","zz","mm";
Arrays.sort(arr, new Comparator()
@Override
public int compare(Object o1, Object o2)
if (o1 instanceof String && o1 instanceof String)
String s1 = (String) o1;
String s2 = (String) o2;
return -s1.compareTo(s2);
// return 0;
throw new RuntimeException("输入类型不对");
);
System.out.println(Arrays.toString(arr));
以上是关于Java比较器的主要内容,如果未能解决你的问题,请参考以下文章