java集合原始碼解析(三)--List
阿新 • • 發佈:2018-11-17
今天給大家帶來有序集合的介面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
既然它叫有序迭代器,那當然它增加了一些跟順序有關的方法咯~我們來看看增加了哪些方法:
有序迭代器和List一樣,都在原有的基礎上增加了有序這個概念,所以引入了引數index,來記錄元素的位置。// 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就到這裡啦~下一集就是帶來List的輕量級實現 AbstractList 啦 !