黑馬程序員_Collection框架知識點

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------


1、 Collection 集合

        集合類的特點
        集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
    
        iterator 迭代器 取出集合中的元素

        兩個常用子類:
        a. List
        b. Set

2、List 序列
        a. 有序的; 存入的順序和取出的順序一致
        b. 元素是有索引的;
        c. 元素可以重複

        瞭解List接口的特有方法,注意:這些特有方法都是圍繞着腳標定義的。

        a. add(index,element);

        b. remove(index);
        c. set(index,element);
        d. get(index);
    
        List接口支持,增刪改查操作

                ---ListIterator 列表迭代器,可以同時操作容器
                ---Victor:數組結構的,是同步的。被ArrayList替代,因爲效率低
                ---ArrayList:數據結構是數組結構,是不同步的。查詢速度很快
                ---LinkedList:數據結構是鏈表結構,是不同步的。增刪的速度很快

        List類中支持對對集合中元素進行迭代的同時對元素進行增、刪、改、查
    
3、 注意LinkedList中的特有的方法,可以利用這些方法模擬堆棧,或隊列
        addFirst();
        addLast();

        getFirst();
        getList();

        removeFirst();
        removeLast();

        offerFirst(E e);
        offerLast(E e);

        peekFirst();

        peekLast();

4、 set: 集   元素不可以重複
        set裏面沒有特殊的方法,其方法和Collection方法一致

5、 set的子類
        ---HashSet:  是不同步的  查詢速度快,不能重複
                記住:存儲到哈希表中的對象,必須覆蓋hashCode和equals方法。建立在哈希表判斷元素唯一性的方式。
        ---TreeSet:是不同步的  他可以對set集合中的元素進行排序。   數據結構是二叉樹。
        TreeSet排序有兩種方式:
        第一種:讓元素自身具備比較性。讓元素對象實現Comparable接口,覆蓋compareTo方法。
                但是,需求中,需要元素的非自然排序時,或者元素本compareTo身就不具備自然排序,怎麼辦?
        第二種:讓容器具備比較性。其實就是定義一個比較器,就是實現Comparator接口,覆蓋compare方法。

        List結合判斷元素是否相同使用的是equals方法;
        HashSet集合判斷元素相同,依據hashCode和equals方法;
        TreeSet集合判斷元素相同,依據compareTo或者compare方法的return 0;

        ArrayLIst:數組結構,所屬於List,想到索引,查詢快

        LinkedList:鏈表結構,所屬於List,想到增刪快

        HashSet:哈希表結構,所屬於Set,想到唯一性,查詢速度快

        TreeSet:二叉樹結構,所屬於Set,想到唯一性,而且排序,自然排序Comparable,compareTo  比較器排序,comparator  compare方法
        HashSet hs = new LinkedHashSet();//在哈希表基礎上保證有序。


6、 泛型:先明確類型,存儲時,如果類型不匹配,就編譯時報錯。
        a.JKD 1.5版本出現的新特性;
        b.泛型將運行時期的問題轉移到了編譯時期。
        c.避免了強制轉換的麻煩
        d.泛型技術是用於編譯時期的技術。

7、 泛型的體現:
        <>這就是用於定義類型參數的符號;泛型可以簡單的理解爲,接收具體的元素類型。
        對源碼進行編譯時,通過泛型進行類型的檢查;如果類型沒有問題,則將源碼編譯成class文件。
        注意,class文件中是不帶有泛型信息的,這種情況稱之爲泛型擦除。
    
8、 類型操作的對象類型不確定,將泛型定義在類上;
        方法中操作的類型不確定,將泛型定義在方法上。

        如果是在靜態方法上使用泛型,該泛型必須定義在方法上。

9、 泛型接口:定義的類實現了一個帶有泛型的接口,覆蓋接口方法的時候要符合泛型類型;

        在實現接口的時候,不明確泛型的類型,覆蓋方法的時候繼續使用泛型;

10、 泛型的限定:分兩種 上限   下限:
        ? extends E: 上限  接收E類型或者E的子類型

        ? super E:下限  接收E類型或者E的父類型

11、 Map: 視圖
        a.Map集合中存儲的是一對兒元素,鍵和值。
        b.必須保證鍵的唯一性。
        c.如果存儲鍵相同,值會覆蓋。

        存的方式:put(key,value);
        取得方式:keySet(),entrySet().values();原理:就是將Map集合轉換成set集合或者Collection,在通過Iterator取出。

        Map子類
                ---Hashtable:哈希表結構,同步的。null不可以作爲鍵和值
                ---HashMap:哈希表結構,不同步的。替代了Hashtable。允許null以作爲鍵和值 不保證順序
                ---TreeMap:基於二叉樹,不同步的,可以對map集合中的鍵進行排序。

12、 什麼時候用Map集合?
        在分析需求中,如果出現了映射關係,就要先想到具備對應關係的容器。
        比如:數組,list,map
        如果對應關係的一方是有序的數字,可以考慮數組和list,元素固定考慮list。
        如果對象關係的一方沒有有序的數字,就要想到map。

        通常這些對應關係的容器都可以用於查表法。

13、 Arrays:用於操作數據的工具類提供的很多常見的方法比如排序,搜索等
        該類中的方法都是靜態的。

14、 數組轉成集合List。List asList([]);

        好處:可以使用集合List的方法來操作數組中的元素。可以使用集合該查方法,只要不改變數組長度都可以。

        弊端:不可以使用集合的增刪方法

        List集合使用的最終還是這個數組,數組的固定長度的。所以不可以對其進行增刪。

        特殊情況:
        如果數組中存儲的是基本數據類型,那麼asList會將這個數組實體作爲集合中的元素。
        如果數組中存儲的都是對象,那麼asList會將數組中的元素作爲集合中的元素

15、 將集合轉成數組。
        如果傳遞的數組長度小於集合的長度,在toArray內部會自動創建一個長度和集合相同的數組。用於存儲集合的元素。
        如果傳遞的數組長度大於等於集合的長度,則使用該數組存儲集合的元素
        一般情況下最好使用集合的size();

        限定數組的增刪。

16、 Collections:
        a.用於操作集合的工具類。
        b.提供了很多靜態方法。

        比如對List集合排序,二分查找,位置置換。對排序的元素進行逆轉。reverseOrder
        還可以獲取集合的最大值。
        最牛叉的是將非同步的集合轉換成同步的集合synchronizedXXX

17、 新的for循環。
        格式:for(元素類型 變量名:Collection集合or數組)
                  {
                        執行語句;    
                  }

18、 傳統for和foreach的區別?
        foreach循環必須有被遍歷的目標,要麼是Collection,要麼是數組。

        建議遍歷數組是,用傳統for循環,因爲可以對數組的角標進行操作。

19、 可變參數 int... arr
        可變參數用於簡化書寫,
        注意:只能定義在參數列表的最後。

20、 System.getProperty("line.separator");可以實現在任何操作系同下的換行,因爲該功能獲取了當前系統的換行符。

21、 RunTime類:沒有結構函數,不可以實例化,但是還提供了非靜態方法。所以應該會提供靜態的返回值類型爲RunTime的方法獲取該對象。

22、 Math:用於數學運算的類。提供了數學運算的靜態方法

        ceil 返回大於參數的最小整數

        floor 返回小於參數的最大整數

        round 四捨五入

        max(a,b)返回兩個數中最大的一個
    
        pow(a,b);返回a的b次冪

23、 日期對象和毫秒值之間的轉換。
        毫秒值轉成--->日期對象
        a.new Date(long);構造函數方法;
        b.setTime(long);

        獲取日期對象,可以通過對對象的方法對該日期進行指定字段的操作。

        日期對象轉成毫秒值--->通常用於進行運算--->通過Date對象的getTime方法
    
24、 import的出現是爲了簡化類名的書寫


---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------
詳細請查看:www.itheima.com
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章