對(duì)集合或數(shù)組進(jìn)行排序有兩種方法:
1.集合中的對(duì)象所屬的類實(shí)現(xiàn)了java.lang.Comparable 接口,然后調(diào)用Collections.sort()或者Arrays.sort()
2.實(shí)現(xiàn)java.lang.Comparator接口睦疫,把這個(gè)實(shí)現(xiàn)接口的類作為參數(shù)傳遞給上述的sort()方法底洗。
1亥揖、Comparable<T> java.lang Interface Comparable<T>
屬于Java集合框架下的一個(gè)接口挚歧。它只有一個(gè)方法 int compareTo(T o) 用于提供排序所需要的比較邏輯滑负。實(shí)現(xiàn)這個(gè)接口的類痴鳄,其對(duì)象都可以通過調(diào)用Collections.sort()或者Arrays.sort()進(jìn)行排序槽华,根據(jù)compareTo的邏輯升序排列。
class Person implements Comparable<Person>{
String name;
public Person(String name) {
this.name = name;
}
public int compareTo(Person other) {
//按名字的字母順序從z~a排
if(name.compareTo(other.name) < 0) //當(dāng)前的字符串,在比較字符串之前撩幽,那就返回1
return 1;
else
if(name.compareTo(other.name) > 0)
return -1;
else
return 0;
}
}
2宪萄、再來看Comparator<T> java.util Interface Comparator<T>
簡單來說,Comparator是策略模式的一種實(shí)現(xiàn)榨惰,體現(xiàn)了將類和排序算法相分離的原則雨膨。
class ComparatorImp implements Comparator<Person>{
public int compare(Person p1, Person p2) {
if(p1.name.compareTo(p2.name) < 0)
return -1;
else
return (p1.name.compareTo(p2.name) > 0) ? 1 : 0;
}
}
測(cè)試
public class TestComparable {
public static void main(String[] args) {
Person[] aPersons = new Person[4];
aPersons[0] = new Person("Jony");
aPersons[1] = new Person("Pun");
aPersons[2] = new Person("HelloKitty");
aPersons[3] = new Person("Brown");
Arrays.sort(aPersons);
for(Person p: aPersons ) {
System.out.print(p.name + " ");
}
System.out.println();
Arrays.sort(aPersons, new ComparatorImp());
for(Person p: aPersons ) {
System.out.print(p.name + " ");
}
System.out.println();
List<Person> lperson = new LinkedList<Person>();
for(Person p : aPersons) {
lperson.add(p);
}
Collections.sort(lperson);
for(int i = 0 ; i < lperson.size(); i++) {
System.out.print(lperson.get(i).name+ " ");
}
}
}