1. 程式人生 > >Java集合類中Sort排序的使用方法

Java集合類中Sort排序的使用方法

//對整數集合進行排序
public void sortIntArray() {
int[] array = new int[] { 8, 5, 9, 0, 6, 3, 4, 7, 2, 1 };
System.out.println("整數排序前");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
Arrays.sort(array);

//對字串集合進行排序

String[] array = new String[] { "a", "c", "e", "d", "b" };

System.out.println("字串排序後");
Arrays.sort(array);

//對集合進行排序

    java對集合排序的方法主要有兩種,分別為實現Comparator介面和實現Comparable介面。其中,實現Comparable介面比較簡單,用於單一標準的排序。如:

public class Animals implements Comparable<Animals>{
private String name;
public int age;
public Animals(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
LinkedList<Animals> list = new LinkedList<Animals>();
list.add(new Animals("a", 2));
list.add(new Animals("b", 4));
list.add(new Animals("c", 6));

                Collections.sort(list);//需重寫compareTo()方法
for (Animals animals : list) {
System.out.println("Animals name=" + animals.name + "age="
+ animals.age);
}
}
@Override
public int compareTo(Animals o) {
if (this.age > o.age)
return 1;
if (this.age < o.age)
return -1;
else
return 0;
}
}

   但如果要實現多種要求的排序,就要實現Comparator介面了。因為Comparable介面只能用一種方式比較。實現Comparator介面,如:

Collections.sort(list, new AnimalsComparator());//sort方法的兩個引數:比較的集合,比較器類的物件。

//比較器類,實現compare()方法

class AnimalsComparator implements Comparator<Animals> {
@Override
public int compare(Animals o1, Animals o2) {
if (o1.age > o2.age)
return 1;
if (o1.age < o2.age)
return -1;
else
return 0;
}
}

這樣,通過構建不同的比較器類,並在sort()方法裡面傳入不同的比較器類物件,就能實現物件的不同屬性比較。上面是按年齡,如果按體重也可以,如:

Collections.sort(list, new AnimalsWeightComparator());

class AnimalsWeightComparator implements Comparator<Animals> {
@Override
public int compare(Animals o1, Animals o2) {
if (o1.weight> o2.weight)
return 1;
if (o1.weight< o2.weight)
return -1;
else
return 0;
}
}

當然PO類要有對應的屬性,併為屬性傳入引數。


用Collections.sort方法對list排序有兩種方法

第一種是list中的物件實現Comparable介面,如下:

publicclassUser implementsComparable <user> { privateString name; privateInteger order; publicString getName() { returnname; } publicvoidsetName(String name) { this.name = name; } publicInteger getOrder() { returnorder; } publicvoidsetOrder(Integer order) { this.order = order; } publicintcompareTo(User arg0) { returnthis.getOrder().compareTo(arg0.getOrder()); } } </user>
Collections.sort(list);