溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

List基本介紹是什么呢

發(fā)布時(shí)間:2021-10-20 17:29:14 來(lái)源:億速云 閱讀:170 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)List基本介紹是什么呢,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

List的架構(gòu)

List基本介紹是什么呢

  • List繼承自Collection的接口,是一個(gè)有序隊(duì)列的元素集合,每個(gè)元素都可通過(guò)下標(biāo)索引獲取。

  • AbstractList是一個(gè)抽象類(lèi),繼承了AbstractCollection,AbstractCollection實(shí)現(xiàn)了List中的絕大部分函數(shù),為L(zhǎng)ist的實(shí)現(xiàn)類(lèi)提供了便利。

  • List的基本實(shí)現(xiàn)主要是ArrayList、LinkedList和Vector。

ArrayList

  • 底層基于數(shù)組實(shí)現(xiàn),可將其視為一個(gè)可動(dòng)態(tài)調(diào)整大小的數(shù)組。

  • 查找/更新元素基于下標(biāo)快速實(shí)現(xiàn),時(shí)間復(fù)雜為O(1)。

  • 添加/刪除操作時(shí):如果操作集合頭部則剩下所有元素都需要移動(dòng)位置,此時(shí)時(shí)間復(fù)雜度為O(n);如果操作集合尾部?jī)H需一次操作,此時(shí)時(shí)間復(fù)雜度為O(1);由于概率得知每次操作時(shí)平均需要進(jìn)行n/2次操作,所以時(shí)間復(fù)雜度為O(n/2)省略常數(shù)1/2,所以添加/刪除操作的時(shí)間復(fù)雜度就為O(n)。

LinkedList

  • 底層通過(guò)雙向鏈表實(shí)現(xiàn)。

  • 查找/更新操作時(shí):如果操作集合頭部或者尾部?jī)H需一次操作,此時(shí)時(shí)間復(fù)雜度為O(1);如果操作集合中間位置則需要循環(huán)遍歷n/2次;所以查找/更新操作的時(shí)間復(fù)雜度就為O(n)。

  • 添加/刪除操作時(shí):需要先定位到元素再進(jìn)行操作,所以時(shí)間復(fù)雜度與查找/更新一致為O(n)。

Vector

  • 與ArrayList基本相同,通過(guò)數(shù)組實(shí)現(xiàn)。

  • 通過(guò)synchronize關(guān)鍵字修飾方法來(lái)實(shí)現(xiàn)線(xiàn)程安全。

  • 默認(rèn)增長(zhǎng)策略是2倍,可自定義增長(zhǎng)因子(ArrayList是1.5倍,不可自定義)

List的源碼解析
public interface List<E> extends Collection<E> {
    /** 返回當(dāng)前集合中元素的數(shù)量;如果集合中包含的元素?cái)?shù)量大于Integer.MAX_VALUE 則直接返回Integer.MAX_VALUE **/
    int size();
    
    /** 返回當(dāng)前集合是否不包含任何元素 **/
    boolean isEmpty();
    
    /** 返回一個(gè)包含當(dāng)前集合中所有元素的Object數(shù)組 **/
    Object[] toArray();
    
    /** 返回一個(gè)包含當(dāng)前集合中所有元素的指定類(lèi)型T數(shù)組 **/
    <T> T[] toArray(T[] a);
    
    /** 返回當(dāng)前集合是否包含指定的元素o **/
    boolean contains(Object o);

    /** 返回當(dāng)前集合是否包含指定集合c中的所有元素 **/
    boolean containsAll(Collection<?> c);

    /** 往當(dāng)前集合中添加元素e **/
    boolean add(E e);
    
    /** 往當(dāng)前集合中指定位置index添加元素e **/
    void add(int index, E e);

    /** 添加指定集合c中的所有元素到當(dāng)前集合 **/
    boolean addAll(Collection<? extends E> c);

    /** 從當(dāng)前集合指定位置index開(kāi)始插入指定集合c中的所有元素 **/
    boolean addAll(int index, Collection<? extends E> c);
    
    /** 從當(dāng)前集合中移除指定元素e,如果集合中包含多個(gè)相同元素,則移除第一個(gè) **/
    boolean remove(Object e);
    
    /** 移除當(dāng)前集合中指定位置index的元素 **/
    E remove(int index);
    
    /** 從當(dāng)前集合中移除指定集合c中包含的所有元素 **/
    boolean removeAll(Collection<?> c);
    
    /** 只保留當(dāng)前集合與指定集合c中都存在的元素 **/
    boolean retainAll(Collection<?> c);
    
    /** 移除當(dāng)前集合中所有的元素 **/
    void clear();
    
    /** 將集合中每個(gè)元素替換為該元素運(yùn)算的結(jié)果;JDK1.8新增方法 **/
    default void replaceAll(UnaryOperator<E> operator) {
        Objects.requireNonNull(operator);
        final ListIterator<E> li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }
    
    /** 根據(jù)給定的排序規(guī)則排序集合;JDK1.8新增方法 **/
    default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }
    
    /** 返回當(dāng)前集合中指定元素的下標(biāo) **/
    E get(int index);
    
    /** 用指定的元素element替換當(dāng)前集合中指定位置index中的元素 **/
    E set(int index, E element);
    
    /** 返回當(dāng)前集合中第一次出現(xiàn)指定元素o的下標(biāo)位置;如果集合中不包含這個(gè)元素,則返回-1 **/
    int indexOf(Object o);
    
    /** 返回當(dāng)前集合中最后一次出現(xiàn)指定元素o的下標(biāo)位置;如果集合中不包含這個(gè)元素,則返回-1  **/
    int lastIndexOf(Object o);
    
	/** 返回當(dāng)前集合的迭代器 **/
    Iterator<E> iterator();
	
    /** 返回當(dāng)前集合的集合迭代器 **/
    ListIterator<E> listIterator();
    
    /** 返回當(dāng)前集合指定起始位置index的集合迭代器 **/
    ListIterator<E> listIterator(int index);
    
    /** 返回當(dāng)前集合指定起始結(jié)束位置組成的新的集合 **/
    List<E> subList(int fromIndex, int toIndex);
    
    /** 返回一個(gè)可分割迭代器,增加并行處理能力;繼承自Iterable接口;JDK1.8新增的方法 **/
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }
}

以上就是List基本介紹是什么呢,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI