工具類:Colletions ,Arrays(靜態導入,可變參數,強循環)

1、Collecti    專門用來操做集合的工具類,沒有構造函數,全靜態方法。java


    經常使用方法:
      static <T extends Comparable<? super T>> void sort(List<T> list) :
                                  對一個元素自帶比較方法的List集合排序。
      static <T> void sort(List<T> list, Comparator<? super T> c) :
                                  對一個元素不帶比較方法的List集合排序(本身創建比較器。)

      static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) :
                                  對一個有序的List集合進行二分查找。
      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<?> list) :
                                  反轉指定集合中的全部元素。

      static <T> Comparator<T> reverseOrder() :
                                  返回一個比較器,它強行逆轉實現了 Comparable 接口的對象 collection 的天然順序。
      static <T> Comparator<T> reverseOrder(Comparator<T> cmp) :
                                  返回一個比較器,它強行逆轉指定比較器的順序。
                            這兩個方法在集合創建的實參列表中傳入,或者在sort語句中傳入(由於返回的爲比較器)。
  

      static void swap(List<?> list, int i, int j) :
                            在指定列表的指定位置處交換元素。
      static <T> List<T> synchronizedList(List<T> list) :
                            返回指定列表支持的同步(線程安全的)列表。(其餘集合同有相應方式)數組


      static void shuffle(List<?> list) : 使用默認隨機源對指定列表進行置換。
      static void shuffle(List<?> list, Random rnd) : 使用指定的隨機源對指定列表進行置換。





2、Arrays
    用於操做數組的工具類,沒有構造函數,全靜態方法。

    經常使用方法:
      static boolean deepEquals(Object[] a1, Object[] a2) :若是兩個指定數組彼此是深層相等 的,則返回 true。




    數組變集合:
      static <T> List<T> asList(T... a) : 返回一個受指定數組支持的固定大小的列表。

      好處:可使用集合中的思想和方法類操做數組中的元素。

      注意:一、返回的List集合中不能使用增刪方法。由於數組長度不能改變,不然會發生異常。

         二、若是數組中的元素都是對象,轉成集合時,會將數組中的元素直接轉變成集合中的元素。
            若是數組中的元素都是基本數據類型,那麼就將數組自己當成元素存入集合。

         三、對於多維數組,<T>應當爲低一級別的數組,傳入集合的爲數組的哈希碼。安全


    集合變數組:
      使用的是Collection接口中的 :dom


          一、 Object[] toArray() 方法。
          二、 <T> T[] toArray(T[] a) 方法。函數


      對於方法一,返回的直接是一個Object類型的數組,其長度爲集合的工具

      對於方法二,若是做爲實參傳入的數組長度小於集合的size,那麼方法內部會自動建立一個新數組,長的爲size。
        若是傳入的數組長度大於集合的size,那麼方法內部不會建立新的數組,而是使用傳入的數組,不滿位爲null。
        因此最好建立一個長度等於集合size的數組做爲參數傳入。

      做用: 爲了限定對元素的操做(元素個數不能再改變,即不能進行增刪)。線程


3、強循環。

      一、Iterable接口,實現該接口,將得到構建迭代器的方法(如:Collection)。對象

          同時,實現這個接口還容許對象成爲 "foreach" 語句的目標。(成爲強循環語句的目標)

      二、強循環語句格式: for(數據類型 變量名 :被遍歷的集合(Cellection)或者數組){ }
              如:for(String s : new ArrayList())
                {
                    (s 指向每次被遍歷到的元素)
                }
        優勢: 對集合數組進行遍歷的時候,簡化了書寫。
        缺點: 有較大的侷限性:只能獲取集合中的元素,不能對集合進行操做。

            而迭代器除了能獲取元素之外,還能remove集合中的元素(ListIterator甚至能添加集合中的元素)
            而傳統for語句更是功能強大, 除了特定狀況建議使用傳統for語句。



4、可變參數。排序

    idk1.5 出現的新特性。

      使用前提條件: 一、在定義形參列表的時候,可能會傳入多個相同類型的參數(非硬性條件)
              二、每一個參數列表只能定義一個可變參數,而且要求放於參數列表的最後面。(硬性要求)

      格式:
              methed(參數類型1,參數類型2,..., 可變參數的參數類型...變量名)
        如:               method(String s, int i, Demo...d) :傳一個字符串、一個整形、一個Demo類型的可變參數。

          實現解釋: 在調用方法傳遞參數時,到了Demo類型時,能夠傳入 多個 、一個或者 0 個參數。
                底層會隱式的將對應參數封裝成對應類型的數組,傳入同類型參數個數就是數組長度。
                以後在方法中遍歷取出元素操做便可。

       如:      咱們調用上述例子: method("sd",8,demo1,demo2,demo3);
                               實際接收參數爲:s= "sd"; i = 8; Demo [] d = {demo1,demo2,demo3}接口

 

5、StaticImport 靜態導入。

    jdk1.5 出現的新特性。       爲了可以使用其餘的包中的類,咱們能夠導入這個類:         如: import java.util.*; :導入了java.util包中的全部類。       藉助相同的原理,咱們要使用其餘的類中的靜態成員時,能夠靜態導入這個類中的靜態成員。         如: import static java.util.Collections.* ; :導入了Collections中的全部靜態成員。            import static java.util.Arrays.*; :導入了Arrays中全部的靜態成員。            import static Java.lang.System.*: : 導入了System中的全部靜態成員。       好處: 再使用上述類中的導入後,使用這些類的靜態成員時能夠不用寫類名         如: Collections.sort(List<T> list) 能夠寫爲: sort(List<T> list);           Arrays.deepEequals(O[] o1, O[] o2); 能夠寫爲 : deepEquals(O[] o1, O[] o2);           System.out.println(); 能夠寫爲: out.println();       注意: 前面學過,在包導入中,若是兩個包中有相同名字的類,實例化該類的時候,必須指明包名。           同理,在類的靜態導入以後,若是方法或成員重名時,應當指明方法所屬的對象或者類名,           不然,系統按照就近原則查找。

相關文章
相關標籤/搜索