數組排序非常簡單,有前輩們的各種排序算法,再加上Java中強大的數組輔助類Arrays與集合輔助類Collections,使得排序變得非常簡單,如果說結合比較器Comparator接口和Collator類及其子類RuleBasedCollator,能將排序發揮到極致。
1.默認規則的排序
- String[] array = {"動作","劇情","情感","驚悚","動畫","紀錄"};
- List<String> list = new ArrayList<String>(); //該List中放有和array數組同樣的數據
- Arrays.sort(array); //數組排序
- Collections.sort(list); //集合排序
輸出結果: 劇情-->動作-->動畫-->情感-->驚悚-->紀錄
很明顯,不是我們要的結果,原因是系統並不知道按什麼順序去排,所以默認為按自然順序處理。要達到我們的目的,就得指定相應的排序規則,如按照中文語言排序,請看下面。
2.帶比較器的排序
- public MyComparator implements Comparator<String>{
- @Override
- public int compare(String o1, String o2) {
- return Collator.getInstance(Locale.CHINA).compare(o1, o2); //注意 :Locale.CHINA
- }
- }
排序:
- MyComparator myomparator = new MyComparator();
- Array.sort( array, myomparator); //帶比較器的數組排序
- Collections.sort(list, myomparator); //帶比較器的集合排序
輸出結果: 動畫-->動作-->紀錄-->驚悚-->劇情-->情感
這次結果正確,而且從結果可以看出,該排序是穩定的。
總結:
排序器是需要指定語種的,如我們使用了Locale.CHINA,當然還有其它的,這樣就做到了對中文按首字母排序的功能。可是需求往往是很神奇的,如要排序的不是字符串,而是對象,甚至這些對象是放在集合中,那麼如何針對集合中的對象進行排序呢,請看下篇,http://www.linuxidc.com/Linux/2011-11/46609p2.htm。