1. 程式人生 > >java集合原始碼解析(三)--List

java集合原始碼解析(三)--List

今天給大家帶來有序集合的介面List,我想也應該是大家在工作中用的比較多的

先來看看介面的定義:

public interface List<E> extends Collection<E>
可以看出介面List直接繼承於介面Collection,並且一樣使用了泛型

下面我們再來看看List和Collection兩個介面之間到底有哪些方法是一樣的或是不一樣的?

通過比較兩介面的方法,我看到除了Collection中定義的方法外,List定義了一些新的方法,如下:

   /**
     * 在Collection中定義了一個沒有index的引數的方法,
     * 這個過載的方法有一個索引的引數
     * 意思是將引數2的集合,從索引處新增至本集合
     */
	boolean addAll(int index, Collection<? extends E> c);

 // Positional Access Operations  位置相關操作

   /**
     * 返回指定索引處的元素
     */

	E get(int index);

    /**
     * 將指定索引處的元素替換成引數2元素
     * 指定索引不能超過本集合的範圍 
     */
    E set(int index, E element);

    /**
     * 和之前介紹的addAll類似,在指定索引出新增一個元素
     * 索引最大不能超過集合的長度
     */
    void add(int index, E element);

    /**
     * 移除指定索引處的元素,
     * 索引錯誤同上
     */
    E remove(int index);


    // Search Operations 搜尋操作

    /**
     * 返回 目標引數的 索引
     */
    int indexOf(Object o);

    /**
     * 返回 目標引數 在集合中最後一次的索引
     */
    int lastIndexOf(Object o);


    // List Iterators

    /**
     * 返回一個有序的迭代器物件
     */
    ListIterator<E> listIterator();

    /**
     * 返回一個從索引處開始的有序迭代器物件
     */
    ListIterator<E> listIterator(int index);

    // View

    /**
     * 返回一個子集合從本集合的引數1處到引數2,
     * 包含引數1不包含引數2
     * 這個方法類似於 String的substring
     */
    List<E> subList(int fromIndex, int toIndex);
這裡有個新物件,就是有序迭代器,我們先來看看它的定義:

public interface ListIterator<E> extends Iterator<E>

可以看到它直接繼承於迭代器Iterator

既然它叫有序迭代器,那當然它增加了一些跟順序有關的方法咯~我們來看看增加了哪些方法:

// Query Operations



    /**
     * 和hasNext()相對,判斷是否有前一個元素
     */
    boolean hasPrevious();

    /**
     * 和next()相對,返回前一個元素
     */
    E previous();

    /**
     * 返回下一個元素的索引
     */
    int nextIndex();

    /**
     * 返回前一個元素的索引
     */
    int previousIndex();


    // Modification Operations

   

    /**
     * 將剛剛next()或者previous()返回的元素更改為指定元素
     */
    void set(E e);

    /**
     * 在有序迭代器當前cursor位置插入一個新的元素
     */
    void add(E e);
有序迭代器和List一樣,都在原有的基礎上增加了有序這個概念,所以引入了引數index,來記錄元素的位置。

今天List就到這裡啦~下一集就是帶來List的輕量級實現 AbstractList 啦  !大笑