java.util.Comparator接口容易被实现并使用,但是在Comparator的API文档里有些部分还是应当仔细阅读一下的。
实现了Comparator接口的类可以传给例如Collections.sort这样的排序方法。它们也可以被Map或者Set类使用,用来保证Map或者Set里的元素始终是按某种顺序排列的。TreeSet和TreeMap就是这样的类。
在Comparator接口里,只有一个方法是需要实现的:
int compare(Object o1,Object o2);如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
这些就是通常为了完成比较所要做的一切,但是在Comparator接口的契约里还有别的义务。
首先,compare方法一定要是对称的,意思是compare(a,b)返回的结果要跟compare(b,a)相反。相反的结果意味着,要么返回的值带有不同的正负号,要么都是0。注意,象compare(a,b)返回4而compare(b,a)返回-2这样的情况是合法的。方法里常常可能抛出异常,在这个方法里抛出异常也要是对称的。如果调用compare(a,b)时抛出了一个ClassCastException异常,那么调用compare(b,a)时也必须抛出一个ClassCastException异常。
public abstract class Car {
protected String name;
protected int price;
protected String Brand;
public abstract double depriciation();
}
public class CarComoarator implements Comparator<Car> {
public int compare(Car o1, Car o2) {
int a = (int)(((Car)o1).depriciation());
int b = (int)(((Car)o2).depriciation());
return b-a;
}
}
public class NegonCar extends Car {
public double depriciation() {
return this.price * 0.10;
}
}
public class SUVCar extends Car {
public double depriciation() {
return this.price * 0.15;
}
}
public class Test {
public static void main(String[] args) {
Car car1 = new SUVCar();
car1.price = 40000;
Car car2 = new NegonCar();
car2.price = 30000;
List<Car> beforeSort = new ArrayList();
beforeSort.add(car1); beforeSort.add(car2);
for (Iterator iterator = beforeSort.iterator(); iterator.hasNext();) {
Car car = (Car) iterator.next();
System.out.print(car.depriciation());
}
System.out.println();
sortCar(beforeSort); for (Iterator iterator = beforeSort.iterator();
iterator.hasNext();) { Car car = (Car) iterator.next();
System.out.print(car.depriciation()); }
}
public static void sortCar(List list) {
Collections.sort(list, new CarComoarator());
}
}
分享到:
相关推荐
主要介绍了JAVA使用Comparator接口实现自定义排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java排序Comparator和Comparable
Java中Comparator接口的用法 对集合排序的例子 Comparator
java Comparator 用法 例子java Comparator 用法 例子java Comparator 用法 例子java Comparator 用法 例子
comparator接口与Comparable接口的区别
java的Comparator和Comparable
程序实现时间排序Comparator
主要介绍了Java中实现Comparator接口和用法实例(简明易懂),本文给出实现Comparator接口的实例和使用这个接口的代码实例,需要的朋友可以参考下
他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, ...
NULL 博文链接:https://singhoo.iteye.com/blog/1704428
1.import java.util.Comparator; 2.import net.sourceforge.pinyin4j.PinyinHelper; 3./** 4. * 汉字按照拼音排序的比较器 5. * @author KennyLee 2009-2-23 10:08:59 6. * 7. */ 8.public class ...
在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[] arrays = new String[] { gyu, sdf, zf, 大同, 收到, 地方, 三等分, 的人, 反对高铁, 泛代数, 上的投入...
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧
计算机后端-Java-Java核心基础-第22章 常用类 23. 使用Comparator实现定制排序.avi
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
CPU 使用率、I/O 延迟、系统整体的吞吐量都必须测量和分析。到那时,我们才能判定到底是哪个组件导致了性能瓶颈。关于这个主题有大量优秀的资源,相关的方法和工具也不只针对Java。假定你已经完成了分析,并且判断出...
可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
主要介绍了Java8 Comparator排序方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
cpu-manager:Java:使用Comparator接口管理记录