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接口的使用方法。假设我们有一个User类,其中包含姓名(name)和年龄(age)两个属性。我们需要对User对象列表按照年龄升序、姓名升序的规则进行...
而Comparator接口的排序是局部的,即在每个特定的排序操作中,可以根据需要创建不同的Comparator实例,实现多种排序策略。 在实际开发中,Comparable接口通常用于那些有固定排序规则的类,比如日期、数字等。而...
在Java中,我们还可以使用Comparator接口和Collator类来实现自定义排序。Collator类可以用来比较中文字符串,并且可以根据中文拼音进行排序。 ```java List<String> list = new ArrayList(); list.add("你"); list....
相反,如果需要在不同的场景下使用多种排序标准,或者不想修改原始类,Comparator接口则是首选。 总结起来,Comparable和Comparator接口在Java中都是用来比较对象,但它们的使用场景和设计哲学有所不同。Comparable...
标准库提供了多种排序方式,其中一种是使用`Comparator`接口来实现自定义排序。本教程将深入探讨如何使用`Comparator`来实现对对象集合的定制排序。 `Comparator`接口位于`java.util`包下,它定义了一个方法`...
Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **...
然后,通过使用 Comparator<T> 接口,实现了 Person 类的多种比较规则排序,例如按照姓名、出生日期、年龄等进行排序。 在实验中,我们首先定义了 Person 类,该类包含了构造函数和 setter、getter 方法。然后,...
综上所述,Java提供多种方式来根据对象属性进行排序,包括实现`Comparable`接口,使用`Collections.sort()`方法,以及创建自定义的`Comparator`。在实际开发中,应根据具体需求选择合适的方法。通过理解这些概念,...
在Java编程语言中,Comparable和Comparator接口是两个非常重要的组件,它们主要用来进行对象的比较和排序。了解它们之间的区别对于提升代码的可维护性和灵活性至关重要。 Comparable接口来源于java.lang包,它定义...
- 当你不想改变类的源代码(即不想让类实现`Comparable`接口),或者需要多种排序方式时,可以使用`Comparator<T>`接口。`Comparator`接口定义了一个`compare(T o1, T o2)`方法,用来比较两个对象的顺序。你可以...
Java8 Comparator排序方法实例详解 ...Java8 Comparator排序方法实例详解提供了多种方式来实现排序操作,包括自然排序、根据对象属性排序和多个属性排序。这些方法可以帮助我们更方便地进行排序操作。
4. **多态性**:一个类只能实现一个`Comparable`接口,但可以有多个`Comparator`实例,提供多种排序方式。 在实际开发中,`Comparable`常用于定义类的自然顺序,如日期、数字等。而`Comparator`则在需要根据多种...
Java标准库提供了多种排序算法,最常用的是 `Arrays.sort()` 和 `Collections.sort()` 方法,分别用于数组和集合对象的排序。这些方法底层实现的是快速排序、归并排序或插入排序等高效算法。 对于自定义对象的排序...
本篇文章将主要围绕Java中的排序问题进行深入探讨,特别是涉及Comparator接口的使用。 首先,Java中的排序通常与Arrays类和Collections类紧密相关。这两个类提供了多种排序方法,如Arrays.sort()用于对数组进行排序...
这个"Java排序算法包"提供了对多种排序算法的支持,并且允许用户根据自己的需求自定义比较条件,使得排序功能更加灵活。 1. **排序算法基础**: - 排序是指将一组数据按照特定的顺序进行排列的过程。常见的排序...
在Java编程语言中,`TreeMap`是一种基于红黑树数据结构实现的键值对容器,与`HashMap`不同,`TreeMap`自动按照键的自然顺序或者自定义的比较器进行排序。当我们需要存储的数据有特定的排序需求时,`TreeMap`便成为一...
Java提供了多种排序算法,如冒泡排序、选择排序、插入排序等,但最常用的是`Collections.sort()`方法,它适用于List接口的实现类,能对对象进行自然排序或定制排序。 ```java List<Student> students = new ...
总的来说,Java提供了多种方式对对象进行排序,包括ArrayList的`Collections.sort()`,HashSet的转换和排序,以及TreeSet的自然排序和Comparator排序。理解这些机制可以帮助我们更好地控制数据结构的排序行为,从而...
Java提供了多种排序算法,例如冒泡排序、希尔排序、堆排序等。这些算法可以使用Comparable接口或Comparator接口来实现对象之间的比较。 例如,使用ArrayList和Collections.sort()方法实现Person对象的排序: ```...
### Comparable与Comparator的区别详解 #### 一、引言 在Java编程中,为了对自定义对象...它通常用于自定义排序或需要多种排序方式的场景。 理解这两种接口的区别可以帮助开发者更加高效地处理Java中的排序问题。