Java之容器

一杯涼茶發表於2016-03-27

    容器
Collection介面定義了存取一組物件的方法,其子介面Set和List分別定義了儲存方式
    ·Set中的資料物件沒有順序且不可以重複    HashSet
    ·List中的資料物件有順序且可以重複        LinkedList(底層為連結串列)  ArrayList(底層為陣列)
        
·Array讀快改慢
·Linked改快讀慢
·Hash兩者之間

Map介面定義了儲存“鍵(key) - 值(value)對映對”的方法    HashMap

①Collection介面中所定義的方法
    int size()
    boolean isEmpty()
    void clear()
    boolean contains(object element)    //是否包含了element元素
    boolean add(object element)
    boolean remove(object element)
    Iterator iterator();
    boolean containsAll(Collection c)    //是否包含了集合c裡面的所有元素
    boolean addAll(Collection c)        
    boolean removeAll(Collection c)        //移除有集合c裡面的所有元素
    boolean retainAll(Collection c)        //跟另一個集合的交集
    Object[] toArray()

②Iterator介面        為了統一遍歷Collection中方法,
    ·所有實現了Collection介面的容器類都有一個iterator方法用以返回一個實現了Iterator介面的物件
    ·Iterator物件稱作迭代器,用以方便的實現對容器內元素的遍歷操作
    ·Iterator介面定義瞭如下方法
        ·boolean hasNext()    //判斷遊標右邊是否有元素
        ·object next()        //返回遊標右邊的元素並將遊標移動到下一個位置
        ·void remove()        //刪除遊標左面的元素,在執行完next之後該操作只執行一次
補充:增強的for迴圈  
    缺陷:
        ·陣列:不能方便的訪問下標值
        ·集合:與使用iterator相比,不能方便的刪除集合中的內容
    總結:除了簡單遍歷並讀出其中的內容
    int[] arr = {1,2,3,4,5};
    for(int i : arr){
        System.out.println(i);
    }

    Collection c = new ArrayList();
    c.add();
    c.add();
    c.add();
    for(Object o : c){
        System.out.println(o);
    }


③Set介面
    ·Collection的子介面,Set介面沒有提供額外的方法,但實現Set介面的容器類中的元素是沒有順序的,而且不可以重複
    ·Set容器可以與數學中“集合”的概念相對應
    ·J2sDK API中所提供的Set容器類有HashSet,TreeSet等

④List介面
    ·List介面是Collection的子介面,實現List介面的容器類中的元素是有順序的,能重複的
    ·List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素
    ·J2SDK 所提供的List容器類有ArrayList,LinkedList等。
        List容器常用演算法
            ·void sort(List) 對List容器內的元素排序
            ·void shuffle(List) 對List容器內的物件進行隨機排序
            ·void reverse(List) 對List容器內的物件進行逆序排列
            ·void fil(List, object) 用一個特定的物件重寫整個List容器
            ·coid copy(List dest, List src) 將src List容器內容拷貝到dest List容器
            ·int binarySearch(List,object) 對於順序的List容器,採用折半查詢的方法查詢特定物件

⑤comparable介面
    ·所有可以“排序”的類都實現了此方法,
    ·只有一個方法public int compareTo(object obj);
        返回0 表示 this == obj
        返回正數 表示 this > obj
        返回負數 表示 this < obj

⑥Map介面    
    ·實現Map介面的類用來儲存鍵 -值 對
    ·Map介面的實現類有HashMap 和 TreeMap 等
    ·Map類中儲存的鍵 - 值對通過鍵來標識,所以鍵值不能重複
        Object put(Object key, Object value)
        Object get(Object key)
        Object remove(Object key)
        boolean containsKey(Object key)
        boolean containsValue(Object value)
        int size()
        boolean isEmpty()
        void putAll(Map t)
        void clear()

自動打包 Auto-boxing/unboxing
    ·在核實的時機自動打包、解包
    ·自動將物件轉換為基礎型別



泛型Generic
起因:
    ·JDK1.4以前型別不明確:
        ·裝入集合的型別都被當作Object對待,從而失去自己的實際型別
        ·從集合中取出時往往需要轉型,效率低,容易產生錯誤
解決辦法
    ·在定義集合的時候同時定義集合中物件的型別
    ·例項:
        ·可以再定義Collection的時候指定
        ·也可以在迴圈時用Iterator指定
    List<String> c = arrayList<String>();
    Iterator<String> it = c2.iterator();
    
    
好處
    ·增強程式的可讀性和穩定性


補充:Object是所有類的父類,其中的一些方法
    toString()方法
    ·public String toString() 描述當前物件的有關資訊
    ·在進行String與其它型別資料的連線操作時,(如:System.out.println("info" + person))將自動呼叫該物件類的toString()方法
    ·可以根據需要在使用者自定義型別中重寫toString()方法

    hashCode()方法
    雜湊碼

    equals()方法 相當於“==” 所以大多數類中重寫了equals()方法
    public boolean equals(Object obj)

    比較物件是否相等,重寫
    public boolean equals(Object obj){
        if(obj == null) return false;
        else{
            if(obj instanceof class){    //class類,判斷obj是否屬於class類
                Class c = (class)obj;
                if(c.color == this.color && ...){   //所有屬性都相同
                    return true;
                }
            }

        }
    }



總結:1136
    ·一個圖
        Collection                Map
        /    \                 |
         set    list                  hashMap
         /        /   \
       hashSet arrayList  linkedList            
    ·一個類
        ·Collections
    ·三個知識點
        ·for
        ·Generic(泛型)
        ·Auto-boxing/unboxing
    ·六個介面
        ·colleciton
        ·set
        ·list
        ·map
        ·Iterator
        ·comparable

相關文章