天天看點

黑馬程式員_學習日記八_集合三

---------------------- android教育訓練、java教育訓練、期待與您交流! ----------------------

集合架構工具類-sort

    Collections(集合架構工具類),這個類是專門用于對集合進行操作的工具類,該類不能執行個體化對象,它提供了很多方法來對集合進行必要的操作,而且這些方法都是static靜态的。

    其中有一個就是static <T extends Comparable<? super T>> voidsort(List<T> list)方法,這個方法可以對指定的List集合進行排序,它還有另外一個重載的方法,那就是:static <T> void sort(List<T> list, Comparator<? SuperT> c)。這個方法需要傳入一個Comparator的對象作為參數,來對指定的List進行自定義排序。

集合架構工具類-max

    static <T extends Object & Comparable<? super T>>T max(Collection<? extends T c>)這個方法是根據集合内對象的自然順序,傳回指定集合的最大元素。集合中的所有對象必須實作Comparable接口,而且集合中的所有對象都必須是互相可比較的。

    max()也有重載方法,那就是:

    static <T> T max(Collection<? extends T> c,Comparator<? Super T>  comp),這個重載的方法也是需要傳入一個Comparator的對象作為參數,來獲得指定集合中的最大元素。

集合架構工具類-binarySearch

    static <T> int binarySearch(List<? Extends Comparator<?super T>> list, T key),該方法使用二分查找法根據查詢指定列集合的指定對象的索引,傳回值為該對象在集合中的索引。查找的前提是集合是有序的。

       同理這個方法也有重載形式static <T> int binarySearch(List<? extends T>list, T key, Comparator<? super T> c)。

 集合架構工具類-替換反轉

    替換:

    static <T> void fill(List<? super T> list, T obj),用指定對象替換指定集合中的所有對象。

    static <T> boolean replaceAll(List<T> list, T oldVal,T newVal),用指定的對象替換指定集合中的所有指定的原對象。

    反轉:

    static void reverse(List<T> list),反轉指定集合中的對象。

 集合架構工具類-reverseOrder

    static <T> Comparator<T> reverseOrder(),該方法強行逆轉實作了Comparable接口的集合的自然順序,傳回值是一個Comparator比較器。

    該方法也有一個重載方法:

    static <T> Comparator<T>reverseOrder(Comparator<T> cmp),該方法參數為一個比較器對象,強行逆轉該比較器對象的順序,傳回值也是一個Comparator比較器。

集合架構工具類-synList

    集合接口當中有很多方法都是線程不同步的,是以如果在多線程應用中就可能會出現安全問題,是以在集合架構工具類中提供了一些方法可以将指定的那些線程不同步集合轉換成為線程同步的集合。

    static <T> List <T> synchronizedList(List<T>list),将指定的List集合變成線程同步的集合再傳回。

    Set和Map集合也有相應的方法。

Arrays

    Arrays也是一個集合架構工具類,該工具類用于操作數組。它所提供的方法也都是static的。

    該工具類中有個比較特殊的方法需要注意,那就是:

    static <T> List<T> asList(T… a),該方法的功能是将指定數組轉換成固定大小的集合。把數組轉換成集合的好處可以使用集合的思想和使用集合的部分方法來操作數組中的元素。

    注意:将數組轉換成集合不可以使用集合的增删方法,因為數組的長度是固定的,無法添加,删除元素。否則會抛出UnsupportedOperationException。

集合轉換成數組

    将集合轉換成數組方法就是之前在Collection這個接口中的Object[] toArray()方法,它也有重載形式:<T> T[] toArray(T[] a),它傳回的數組與方法參數指定的數組類型相同。當指定類型的數組長度小于了集合的size,那麼該方法内部會建立一個新的數組長度為集合的size,當指定類型數組的長度大于集合的size,就不會建立新的數組,而是使用傳遞進來的數組。是以建立一個長度剛剛好的數組最優:toArray(T[集合名稱.size()])。

    為什麼要将集合轉換成數組呢?其實有時候是為了限定對元素的操作,不需要對集合進行增加和删除的操作的時候就可以将集合轉換成數組。

增強for循環

    在JDK1.5版本中,Collection這個接口繼承了Iterable接口,在這個接口中隻有一個iterator()方法,其實這個接口就是單獨将這個方法抽取出來了,以後如果産生了新的集合類,隻要事先這個接口,就可以調用iterator()周遊集合中的元素。

    除此之外,Iterable這個接口還增強了for語句的功能,就是進階for循環:進階for循環的出現其實也是為了使周遊集合的語句更加簡潔。

    格式:  for(資料類型 變量名:被周遊的集合(Collection對象)或者數組名),比如:

    ArrayList<String> arrayList = newArrayList<String>();

    arrayList.add(“abc”);

    arrayList.add(“def”);

    arrayList.add(“ghi”);

    for(String str: al)

    {

        System.out.println(str);

    }

    總結:Collcetion中幾種周遊方式的比較。

1.進階for語句對集合進行周遊,隻能擷取元素,而不能對元素進行操作。

2.疊代器Iterator除了周遊,還能調用remove()方法移除集合中的對象。

3. ListIterator這個接口在周遊過程中還可以進行增删改查的動作。

    傳統for循環語句和進階for循環語句的差別:

    進階for循環必須有被周遊的目标。是以在周遊數組的時候,最好還是使用傳統for循環語句,這樣可以定義角标,使用起來更加靈活。進階for循環在周遊集合的時候往往使用的更多。

可變參數

    JDK1.5版本中的新特性:可變參數

    如果再某一個方法當中的參數為資料同類型的數組并且個數不确定,可以進行如下的方法定義:

    public void method(int… arr){}

    其中arr數組就是一個長度不确定的數組。

    調用該方法的格式:method(2, 3, 4, 5);

    這樣不用每一次都手動的建立數組對象,隻要将要操作的資料作為參數傳遞到該方法中即可,虛拟機隐式的将這些資料封裝成了數組。

    可變參數在使用時一定要定義在參數清單的最後。

靜态導入

    JDK1.5版本中的新特性:靜态導入

    在導入包的時候可以這樣:import static 包名.類名.*;這樣就把這個包中所有的靜态成員全部導入進來,在調用這些靜态方法的時候,就可以不用再在方法前面加上類名了。

    但是有個地方要注意,當導入進來的方法名稱有重複的情況,就必須指定要調用方法所屬的對象或者類名。

---------------------- android教育訓練、java教育訓練、期待與您交流! ----------------------

詳細請檢視:http://edu.csdn.net/heima

繼續閱讀