幾次接觸Collection排序使用總結


      初次接觸Collection.sort()就是由鞠老師的作業4了解的,因為根據課程安排,這學期才開設java基礎課,所有需要用到的的東西全是自學。而那次作業帶給我最直觀的感受就是:單純的去學習某個方法是特別無趣乏味的,但是,當你因為要實現一個很簡單的功能,而去不斷摸索知識的過程,會很有動力。當功能實現了,回過頭就會發現,哦,這個知識我也懂了。以后再遇到排序的問題,Collection.sort()就會跳出來,等待着我需不需要它。

      工具類java.util.Collections包含於Collection結構中,簡單的說,Collections類的存在,就是為Collection對象服務的。上次作業主要使用了它的Sort方法。根據參考書中的寫法,Collection.sort()對list對象(List接口為Collection接口的派生接口)實施排序操作的定義為

      

public static void sort(List list) public static void sort(List list,Comparator c)

       Collections類僅包含使用Collection結構的類的簡單靜態方法。第一行的sort方法只有一個輸入參數,這是把list對象按照自然順序排列(數字按1,2,3..字母按字典順序等),第二行的sort方法需要兩個輸入參數,第一個參數指明處理對象,第二個參數指明排序方式:按比較算子Comparator排序。下面來講一下Comparator接口。

       當我們需要將一組數據按照非自然順序,即是讓這組數據聽從我們的安排,給他們排隊的時候,就可以使用Comparator接口。其中,Comparator接口中最重要的一個方法,也就是作業中使用到的:compare方法。

public interface Comparator{ public int compare(Object o1,Object o2); public boolean equuals(Object obj); }

      compare方法有兩個Object類型的輸入參數,通過比較這兩個參數的一些值,確定排序方式:如果第一個元素的值小於第二個元素的值,返回值為負數;如果第一個元素的值大於第二個元素的值,返回值為正數;當兩者相等時,返回值為0。

      需要注意的是,方法一中List中所有元素必須實現Comparable接口。如果list中元素不能進行自然比較(比如比較字符型和整型),就會拋出錯誤。方法二中list中所有元素必須是能使用c進行比較的,否則也會拋出UnsupportedOperationException異常。

     作業中已經完成對第二種方法的使用,寫完之后感覺還是很容易實現的。下面嘗試了一下對方法一的使用:

import java.util.ArrayList; import java.util.Collections; import java.util.List;
//對Comparable接口實現
class User implements Comparable<User> { private String name; private Integer order; public String getName() { return
name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } public int compareTo(User arg0) { return this.getOrder().compareTo(arg0.getOrder()); } } public class test { public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); //此處add user2再add user1 list.add(user2); list.add(user1); Collections.sort(list); for(User u : list){ System.out.println(u.getName()); } } }

運行結果為:

注意我是按照user2,user1的順序存入的,結果是輸出的user1(a),user2(b),按照自然順序進行了排序。

這里提一個遇到的問題:當我把User的set,get方法都生成后,還沒有寫compareTo方法,系統告知我:

要使Comparable的CompareTo方法生效,也就是說,當我們使用Collections.sort()進行自然排序時,必須要實現Comparable接口的CompareTo方法。

     所以,當自己下次再次使用Collections.sort時,回來看看這些工作有沒有做到位,給自己提個醒!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM