Java集合类整理

fpcm 9年前

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();
        }