歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java比較器對數組 集合排序

Java比較器對數組 集合排序

日期:2017/3/1 11:08:30   编辑:Linux編程

數組排序非常簡單,有前輩們的各種排序算法,再加上Java中強大的數組輔助類Arrays與集合輔助類Collections,使得排序變得非常簡單,如果說結合比較器Comparator接口和Collator類及其子類RuleBasedCollator,能將排序發揮到極致。

1.默認規則的排序
  1. String[] array = {"動作","劇情","情感","驚悚""動畫""紀錄"};
  2. List<String> list = new ArrayList<String>(); //該List中放有和array數組同樣的數據
  3. Arrays.sort(array); //數組排序
  4. Collections.sort(list); //集合排序

輸出結果: 劇情-->動作-->動畫-->情感-->驚悚-->紀錄
很明顯,不是我們要的結果,原因是系統並不知道按什麼順序去排,所以默認為按自然順序處理。要達到我們的目的,就得指定相應的排序規則,如按照中文語言排序,請看下面。
2.帶比較器的排序
  1. public MyComparator implements Comparator<String>{
  2. @Override
  3. public int compare(String o1, String o2) {
  4. return Collator.getInstance(Locale.CHINA).compare(o1, o2); //注意 :Locale.CHINA
  5. }
  6. }
排序:
  1. MyComparator myomparator = new MyComparator();
  2. Array.sort( array, myomparator); //帶比較器的數組排序
  3. Collections.sort(list, myomparator); //帶比較器的集合排序

輸出結果: 動畫-->動作-->紀錄-->驚悚-->劇情-->情感 這次結果正確,而且從結果可以看出,該排序是穩定的。
總結: 排序器是需要指定語種的,如我們使用了Locale.CHINA,當然還有其它的,這樣就做到了對中文按首字母排序的功能。可是需求往往是很神奇的,如要排序的不是字符串,而是對象,甚至這些對象是放在集合中,那麼如何針對集合中的對象進行排序呢,請看下篇,http://www.linuxidc.com/Linux/2011-11/46609p2.htm。
Copyright © Linux教程網 All Rights Reserved