android comparable接口,Java6.0中Comparable接口与Comparator接口详解

说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者都吃饱撑着没事做吗?

再谈Comparator接口之前,大家应该先了解一个叫“策略模式”的东东。一下是百度百科对策略模式的描写:

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)

之所以要谈到策略模式,就是因为Comparator接口其实就是一种策略模式的实践。实现Comparator接口的类必然就会实现一个compareTo(Object o1, Object o2)的方法,而这个方法就是算法中的一部分,所有使用了compareTo方法的类都不会关心compareTo是如何工作的,只关心他的返回值,这也是面向对象中著名的封装特性。

那Comparator接口应该如何使用呢?别急,首先我们要先对Person类进行一下处理,因为我们现在使用Comparator接口,所以Comparable接口就可以光荣的退休了:

1: public class Person {

2:

3: private String name;

4: private int age;

5:

6: public Person() {

7:

8: }

9:

10: public Person(String name, int age) {

11: this.name = name;

12: this.age = age;

13: }

14:

15: public String getName() {

16: return name;

17: }

18:

19: public void setName(String name) {

20: this.name = name;

21: }

22:

23: public int getAge() {

24: return age;

25: }

26:

27: public void setAge(int age) {

28: this.age = age;

29: }

30:

31: @Override

32: public String toString() {

33: return "Person [age=" + age + ", name=" + name + "]";

34: }

35:

36: }

新建一个实现Comparator的实现类PersonComparator:

1: import java.util.Comparator;

2:

3: public class PersonComparator implements Comparator {

4:

5: @Override

6: public int compare(Person p1, Person p2) {

7: if (p1.getAge() > p2.getAge()) {

8: return 1;

9: } else if (p1.getAge() < p2.getAge()) {

10: return -1;

11: }

12: return 0;

13: }

14:

15: }

然后再用回我们的CompareTest做测试:

1: import java.util.Arrays;

2:

3: public class CompareTest {

4:

5: public static void main(String[] args) {

6: Person[] persons = {

7: new Person("P1", 60),

8: new Person("P2", 20),

9: new Person("P3", 40)

10: };

11:

12: System.out.println(Arrays.toString(persons));

13:

14: Arrays.sort(persons, new PersonComparator());

15:

16: System.out.println(Arrays.toString(persons));

17: }

18:

19: }

注意:在上面的sort方法中,我们传进了一个PersonComparator的实例对象作为参数,读者也可以试试不传入这个参数,看是否能正确工作。

结果当然是跟上面演示的例子一样啦,我就不再重复了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值