2008年10月23日

將List做排序的方法


 
有時候我們會需要將一個List做排序
List裡頭可能是單一基本型別如int, String等等
當然也有可能是自訂的類別
無論是對基本型別或自訂的類別作排序
我們都可以透過Collections.sort(List l, Comparator c)方法來做排序
而其中的Comparator就是排序的關鍵

以下示範一個 StringIntPair 類別
裡頭包含了 String 及 int 兩種資料類型
透過實作不同的Comparator我們就可以將同一個StringIntPair的List做不同的排序
分別是依 String 及 int大小排列
而可以保持String和int資料的對應

下面是 StringIntPair 類別的程式碼:
  1. public class StringIntPair{

  2. private String string;
  3. private int integer;

  4. public StringIntPair(String s, int i) {
  5. string = s;
  6. integer = i;
  7. }

  8. protected String getString() {
  9. return string;
  10. }

  11. protected int getInteger() {
  12. return integer;
  13. }

  14. public String toString() {
  15. return string + "\t" + integer;
  16. }
  17. }

接著是執行 List Sort 的程式碼
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.List;

  5. public class ListSort {

  6. public static void main(String[] args) {

  7. List<StringIntPair> list = new ArrayList<StringIntPair>();

  8. list.add(new StringIntPair("ab", 5));
  9. list.add(new StringIntPair("ca", 3));
  10. list.add(new StringIntPair("aa", 2));
  11. list.add(new StringIntPair("db", 4));
  12. list.add(new StringIntPair("bc", 1));

  13. System.out.println("排序前");
  14. for (Object o:list) {
  15. System.out.println(o);
  16. }

  17. // 依string排序
  18. Collections.sort(list,
  19. new Comparator<StringIntPair>() {
  20. public int compare(StringIntPair o1, StringIntPair o2) {
  21. return o1.getString().compareTo(o2.getString());
  22. }
  23. });
  24. System.out.println();
  25. System.out.println("依string排序");
  26. for (Object o:list) {
  27. System.out.println(o);
  28. }

  29. // 依Integer排序
  30. Collections.sort(list,
  31. new Comparator<StringIntPair>() {
  32. public int compare(StringIntPair o1, StringIntPair o2) {
  33. return o2.getInteger()-o1.getInteger();
  34. }
  35. });
  36. System.out.println();
  37. System.out.println("依Integer排序");
  38. for (Object o:list) {
  39. System.out.println(o);
  40. }
  41. }
  42. }

輸出結果則是
  1. 排序前
  2. ab 5
  3. ca 3
  4. aa 2
  5. db 4
  6. bc 1

  7. 依string排序
  8. aa 2
  9. ab 5
  10. bc 1
  11. ca 3
  12. db 4

  13. 依Integer排序
  14. ab 5
  15. db 4
  16. ca 3
  17. aa 2
  18. bc 1

關鍵字:List, ArrayList, Collections, sort, 排序

參考資料:
1. 針對java.util.Map的Value做排序(1)
2. Java World討論文章[請問一下有關Collections.sort]


更多精選推薦文章

0 意見 :