集合容器结构图:

java集合学习笔记_第1张图片

java容器类类库的用途是保存对象,分为两个概念,collection和map。collection保存单一的元素,而map保存相关联的键值对。


collection    中基本方法:

    int size():获取集合的元素个数

    boolean add(E e):向集合中添加元素

    boolean remove(Object o):删除给定的元素

    boolean isEmpty():判断集合是否不含有元素

    void clear():清除集合中所有元素

    boolean contains(Object o):集合中是否含有给定元素

    boolean addAll(Collection c):将给定集合中的所有元素添加到当前集合

    boolean removeAll(Collection c)删除当前集合中与给定集合相同的元素


List    list接口在collection的基础上添加了大量的方法,使得可以在list的中间插入和移除元素。

    boolean add(int index, E element)  

    boolean addAll(index, collection)

    boolean remove(int index)

    set(int index, E element) 

    get( int index)

    subList(int fromIndex, int toIndex)

    indexof()

    lastIndexof()

    listIterator()

当使用contains,indexof,remove时,都会用到equals()方法,对于不同的类,equals的定义是不同的,使用时需注意。  

  1. ArrayList    适于随机访问,但插入和删除元素较慢

  2. LinkedList    低价的插入和删除,提供了优化的顺序访问,但在随机访问方面较慢。

    除了实现基本的list接口外,还添加了可以使其用作栈,队列,或双端队列的方法,这些方法有的只是名字有差别,有的差别不大,只是为了在特定上下文中更适用。如Queue接口窄化了对LinkedList的方法的访问权限,在方法中的参数类型如果是Queue时,就只能访问Queue接口所定义的方法,而不能直接访问 LinkedList的非Queue的方法。

   3.  Vector     List的实现类还有vector,它与arraylist类似,都是使用数组储存数据,不同的是它可以保证线程安全,但这是需要一定的开销的,并不经常被使用。


stack    栈:可以直接将LinkedList当做栈使用,而不是使用已经过时的stack

    LinkedList stack = new LinkedList()

        boolean empty()  测试堆栈是否为空。

        T peek() 查看堆栈顶部的对象,但不从堆栈中移除它。

        T pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。

        T push(T item)  把项压入堆栈顶部。

        int search(Object o) 返回对象在堆栈中的位置,以 1 为基数。


Queue    队列:LinkedList实现了Queue接口,所以通过LinkedList向上转型为Queue实现

    Queue queue = new LinkedList()

        boolean add(T e)  将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出IllegalStateException。

        T element() 获取,但是不移除此队列的头

        boolean offer(T e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(T),后者可能无法插入元素,而只是抛出一个异常。

        T peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。

        T poll()  获取并移除此队列的头,如果此队列为空,则返回 null。

        T remove()  获取并移除此队列的头。

    

set    不保存重复的元素,与collection是完全一样的接口。

    treeset将元素存储在红黑树结构中

    hashset使用的是散列函数


Map    

        put()

        get()

        keySet()返回它的键的set

        values()返回它的值的collection

        entrySet()返回它的键值对的set

TreeMap:可以按照key值进行排序(红黑树结构)

LinkHashMap:保证map的加入顺序与输出顺序一致

    


Iterator    迭代器

迭代器的作用是遍历并选择序列中的对象,而客户端程序员不必知道该序列的底层结构。

        collections.iterator()得到一个迭代器

        iterator.hasNext()

        iterator.next()

        iterator.remove()在调用此方法之前必须先调用next方法,表示移除最后一个元素。


ListIterator    是Iterator的一个子类,只能用于List类的访问,可以双向移动。

        list.listIterator()得到一个迭代器

        iterator.hasNext()

        iterator.next()

        iterator.hasPrevious()

        iterator.previous()

        iterator.remove()

        iterator.set()替换访问过的最后一个元素

        iterator.nextIndex()返回迭代器在列表中指向的当前位置的后一个元素的索引

        iterator.previous()返回迭代器在列表中指向的当前位置的前一个元素的索引