Java集合類整理

fpcm 9年前發布 | 30K 次閱讀 Java集合 Java開發

Collection:
    set(接口)
    AbstractCollection(抽象類)
        AbstractList->List
            AbstractSequentialList
                LinkedList(實現了Deque雙端隊列接口)
            Vetor<-Stack
            ArrayList
        AbstractSet(實現了Set接口)
            TreeSet:實現了NavigableSet->SortedSet->Set
    List(接口)
    Queue(接口)   
接口
    Collection  Set List    Queue   SortedSet   NavigableSet
    分析:
        1:所有的類或接口都是實現了Collection接口
        2:TreeSet,HashSet,LinkedHashSet實現了Set接口,其中TreeSet實現了SortedSet
        3:ArrayList,Vector,LinkedList實現了List接口
java.util.Collection
    所有集合的根接口
    增加:
        add(o:E):boolean
        addAll(c:Collection<? extends E>):boolean
    刪除
        remove(o:E):boolean
        removeAll(c:Collection<?>):boolean
        clear():boolean
    修改:
    查:
        contains(o:Object):boolean
        containsAll(c:Collection<?>):boolean
    其他:
        equal(o:Object)
        hashCode();int  //返回集合的散列碼
        size():int  
        toArray():Object[]  //返回集合的數組形式
        isEmpty()
        iterator():Interator<E>     //返回一個迭代器
    備注:Iterator接口
        hasNext()
        Next()
Set集合
    Set接口擴展了Collection接口。它沒有引入新的方法或常量,只是規定set的實例不包含重復的元素
        1,Set接口依靠hashCode和equals()完成重復元素的判斷,關注這點在日后的map接口中也有體現
        2,TreeSet依靠Comparable接口來完成排序的操作
        3,Set方法使用時,元素為自定義類時,自定義類要腹瀉Object類中的equals(),hashCode(),toString()方法
        4,具體實現類HashSet,TreeSet,LinkedHashSet
        5,特別注意,規則集中不存在重復元素,所以添加重復元素時會返回false,但是不會有異常
散列集java.util.HashSet    
    初始容量為16,客座率為0.75
    當元素個數超過容量*客座率的乘積,容量就會自動翻倍
    初始化
        HashSet()
        HashSet(c:Collection<? extends E>)
        HashSet(initialCapacity:int)
        HashSet(initialCapacity:int,loadFactor:float)   
    方法:
        實現了Collection接口中的方法
鏈式散列表LinkedHashSet
    用一個鏈表來擴展HashSet,支持對規則集內的元素排序(所謂的排序就是按照添加的順序存儲,訪問的時候也是按照添加的順序)。HashSet中的元素是沒有被排序的,而LinkedHashSet中的元素可以按照他們插入規則集的順序提取。
    初始化:
        LinkedHashSet()
        LinkedHashSet(c:Collection<? extends E>)
        LinkedHashSet(initialCapacity:int)
        LinkedHashSet(initialCapacity:int,loadFactor:float)
    方法:
        實現了Collection中的方法
    Set方法沒有訪問索引的方法,只有add,remove,contains類方法
樹形集TreeSet
    SortedSet是Set的一個子接口,可以確保規則集中的元素時有序的。另外,它還提供方法first,last方法以返回規則集中的第一個和最后一個,以及方法headSet((toElement))和tail(fromElement)返回規則集中小于toElement或大于等于fromElement的部分
    NavigableSet擴展了SortedSet,并提供導航方法lower(e),floor(e),ceiling(e),higher(e)以分別返回小于,小于等于,大于等于以及大于給定元素的元素。如果沒有就返回null。pollFirst,pollLast會分別刪除和返回樹形集中的第一個元素和最后一個元素
    TreeSet是SortedSet的一個具體類,元素必須是可比較的,即元素實現了comparable接口或被指定了比較器
    總結一下方法
    TreeSet普通方法:
        Set自我感覺提供的是一種存儲的服務,并不擅長找出這個位置,所以他的存儲是無序的,因此方法上與list就不一樣了,不需要有index參數
        初始化
            TreeSet()
            TreeSet(c:Collection<? extends E>)
            TreeSet(comparator:Comparator<? super E>)
            TreeSet(s:SortedSet<E>)
        增加:
            add()
            addAll()
        刪除:
            remove()
            removeAll()
            clear()
        修改:
        查找:
            contains()
            containsAll()
        其他(長度,迭代器,哈希code等):
            size();
            toArray()
            isEmpty()
            iterator()
            equals()
            hashCode()
    TreeSet的特殊方法(實現了接口SortedSet和NavigableSet的方法):
        注意:使用這些方法時,定義對象的類型必須是SortedSet
        增加:
            無
        刪除:
            pollFirst()
            pollLast()
        查找:
            導航方法
            首個元素:   first() //空集和時會引發異常
            尾元素:    last()
            小于e的集合  headSet():SortedSet<E> //不存在返回空集
            大于等于e的集合    tailSet():SotedSet<E> //不存在返回空集
            大于e     higher(e)   //不存在返回null
            大于等于    ceiling(e)  //不存在返回null
            小于      lower(e)    //不存在返回null
            小于等于    floor(e)    //不存在返回null     
        修改:
        其他:     
        小技巧:
            1、當定義hashset時可以使用Set<E> set = new HashSet<E>()定義
            2、定義TreeSet時,最后直接使用TreeSet<E> set = new TreeSet<E>()
Comparable接口
    位于java.lang
    public interface Companrable<T>{
        public int compareTo(T o);
    }
Comparator接口
    有時候希望將元素插入一個樹集合中,這些元素可能不是java.lang.comparable的實例,這時可以定義一個比較器來比較這些元素。要做到這一點創建一個java.util.Comparator接口的類。
    comparator接口有兩個方法:
        public int compare(Object e1,Object e2)
        public boolean equals(Object e)




線性表
    規則集中只能存儲不重復的值,為了存儲重復的值需要使員工線性表。
    List接口擴展了Collection接口,以定義一個允許重復的有序集合。List接口增加了面向位置的操作,并且增加了一個能夠雙向遍歷線性表的迭代器
    方法:
        1、可以使用Collection中的方法
        2、操作中分為面向元素和面向位置兩種方式
        增加:
            add(index:int):boolean
            add(index:int,c:Collection<? extends E>)
            add(E)  //末尾添加
            addAll(c:Collection<? extends E>);  //末尾添加
        刪除:
            remove(index:int)
            remove(o)
            removeAll(c)
        修改:
            set(index:int,e):E
        查找:
            //查找元素
            get(index:int):E
            contains(o):boolean
            contains(c):boolean
            //面向索引
            indexOf(e)
            lastIndexOf(e)
        其他
            listIterator():ListIterator<E>
            listIterator(startIndex:int):ListIterator<E>
            subList(fromIndex:int,toIndex:int):List<E>  //返回從fromIndex到toIndex-1的子列表
java.util.ListIterator
        add(o:E):void
        向后:
            hasNext():boolean
            Next():E
            nextIndex():int     //返回下一個元素的下標
            remove():void
        向前:
            hasPrevious()
            previous()
            previousIndex():index   //返回前一個元素的下標
            set(E):void //使用指定的元素替換previous或next返回的最后一個元素
數組線性表ArrayList
java.util.ArrayList<E>:
    初始化:
        List<E> list = new ArrayList<E>();
        ArrayList<E>()
        ArrayList<E>(c:Collection<? extends E>)
        ArrayList<E>(capacity:int)
    增加:
        add(o:E):void
        add(index:int,o:E):void//插入元素
    刪除:
        remove(o:E):boolean
        remove(index:int):boolean//索引必須合理,否則有異常出現
        clear()
    修改:
        set(index:int,o:E):E    //索引必須合理,否則有異常出現
    查:
        get(index:int):E
        indexOf(o:E):int    //不存在返回-1
        lastIndexOf(o:E):int    //不存在返回-1
        contains(o:E):boolean
        isEmpty():boolean
    長度:
        size()
    自動減小
        線性表不會自動減小,只會自動增加
        trimToSize()    //容量減小到這個列表的當前大小
鏈表線性表LinkedList
    實現了List的接口和Queue接口
    初始化
        LinkedList()
        LinkedList(c:Collection<? extends E>)
    增加:
        addFist(o:E)    //添加到列表頭
        addLast(o:E)    //添加到列表尾
        //List中的方法
        add(index)
        add(index,e)
        addAll(c)
    刪除
        removeFirst()
        removeLast()
        //List
        remove(index)
    查找
        getFirst()
        getLast()
        //List
        get(index)
        indexOf(e)
        lastIndexOf(e)
    其他
        //List
        listIterator():ListIterator<E>
        listIterator(index):ListIterator<E>()
        subList(start,end);     //start~end-1
Collection靜態方法
    排序(改進歸并排序)
        sort(list:List):void
        sort(list:List,c:Comparator):void
    查找
        binarySearch(list,key)
        binarySearch(list,key,comparator)
    顛倒
        reverse(list)
    倒序
        reverseOrder();//返回逆序的比較器
    隨機打亂
        shuffle(list)
        shuffle(list,random) //用隨機對象打亂
    復制
        copy(des:List,src:List):void
        nCopies(n:int,o:Object):List    //返回o的n個副本的列表
    填充
        fill(list,o)    //用指定元素替換線性表中的所有元素
    最大值
        max(c:Collection):Object
        max(c:Collection,c:comparator):Object
    最小值
        min(c):Object
        min(c1,c2):Object
    某元素出現次數
        frequency(c:Collection,o:Object):int    
向量類Vector
    與ArrayList幾乎一樣,只是添加了同步方法    
    實現了List方法
    初始化
        Vector()
        Vector(c:Collection<? extends E>)
        Vector(initialCapacity:int);
        Vector(initialCapacity:int,CapacityIncr:int)
    增加:
        addElement(o:E)
        insertElementAt(o:E,index:int)
    刪除
        removeAllElements()
        removeElement(o)
        removeElementAt(index)
    修改:
        setElementAt(o,index)
    查找
        firstElement()
        lastElement()
        ElementAt(index)
Stack
    Stack()
    empty()
    pop()
    push()
    peek():返回棧頂元素
    search(o): 返回棧中指定元素的位置
Queue
    offer(e):向隊列中插入一個元素
    poll(): 出隊,空時返回null
    remove():出隊,空時出現異常
    peek(): 獲取隊首元素,為空時返回null
    element():獲取隊首元素,為空時出現異常
Deque   雙端隊列
    LinkedList 實現了Deque接口,因此可以使用LinkedList創建一個雙端隊列
    addFirst()
    addLast()
    removeFirst()
    removeLast()
    getFirst()
    getLast()


Map
    用于存儲鍵值對形式的數據
    map接口提供的方法
        查詢
            get(key):V
            values():Collection<V>
            keySet():Set<K>
            entrySet():Set<Map.Entry<K,V>>
            containsKey(key):boolean
            containsValue(value):boolean
            isEmpty()
            size()
        增加
            put(key,value)
            put(map)
        刪除
            remove(key)
            clear()
        修改
HashMap

LinkedHashMap
    使用linked list實現來擴展HashMap
TreeMap         
    在遍歷排好序的鍵值時高效
    有新的導航方法
        firstKey()
        lastKey()
        headMap(toKey)
        tailMap(fromKey)

        floorKey(key)
        ceillingKey(key)
        lowerKey(key)
        higherKey(key)
    附:map的遍歷方法
        Set<Map.Entry<K,V>> set = map.entrySet();
        for(Map.Entry<K,V> m : set){
            key=m.getKey();
            value=m.getValue();
        }

 本文由用戶 fpcm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!