Comparable接口
当我们实现Comparable接口时,便可以用一些排序方法对其数组或者列表进行排序
public class Money implements Comparable<Money> {
int num;
public Money(int num) {
this.num = num;
}
public int compareTo(Money m) {
if(this.num < m.num) return -1;
else if(this.num == m.num) return 0;
else return 1;
}
@Override
public String toString() {
return num+"";
}
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
Money[] m = {new Money(3),new Money(5),new Money(4)};
List<Money> list = Arrays.asList(m);
Collections.sort(list);
System.out.println(list);
}
}
[3, 4, 5]
Comparator接口
有时只有一种比较方法不够用我们可以运用策略模式,设计实现Comparator接口的比较类,就可以运用多种方式进行排序。
import java.util.Comparator;
public class BigMoneyComparator implements Comparator<Money> {
@Override
public int compare(Money o1, Money o2) {
if(o1.num < o2.num) return -1;
else if(o1.num == o2.num) return 1;
else return 0;
}
}
import java.util.Comparator;
public class SmallMoneyComparator implements Comparator<Money> {
@Override
public int compare(Money o1, Money o2) {
if(o1.num > o2.num) return -1;
else if(o1.num == o2.num) return 1;
else return 0;
}
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
Money[] m = {new Money(3),new Money(5),new Money(4)};
List<Money> list = Arrays.asList(m);
Collections.sort(list,new BigMoneyComparator());
System.out.println(list);
Collections.sort(list,new SmallMoneyComparator());
System.out.println(list);
}
}
[3, 4, 5]
[5, 4, 3]
这种对对象的处理的策略模式可以运用在代码的设计阶段,增加灵活性。