您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關List基本介紹是什么呢,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
List繼承自Collection的接口,是一個有序隊列的元素集合,每個元素都可通過下標索引獲取。
AbstractList是一個抽象類,繼承了AbstractCollection,AbstractCollection實現了List中的絕大部分函數,為List的實現類提供了便利。
List的基本實現主要是ArrayList、LinkedList和Vector。
底層基于數組實現,可將其視為一個可動態調整大小的數組。
查找/更新元素基于下標快速實現,時間復雜為O(1)。
添加/刪除操作時:如果操作集合頭部則剩下所有元素都需要移動位置,此時時間復雜度為O(n);如果操作集合尾部僅需一次操作,此時時間復雜度為O(1);由于概率得知每次操作時平均需要進行n/2次操作,所以時間復雜度為O(n/2)省略常數1/2,所以添加/刪除操作的時間復雜度就為O(n)。
底層通過雙向鏈表實現。
查找/更新操作時:如果操作集合頭部或者尾部僅需一次操作,此時時間復雜度為O(1);如果操作集合中間位置則需要循環遍歷n/2次;所以查找/更新操作的時間復雜度就為O(n)。
添加/刪除操作時:需要先定位到元素再進行操作,所以時間復雜度與查找/更新一致為O(n)。
與ArrayList基本相同,通過數組實現。
通過synchronize
關鍵字修飾方法來實現線程安全。
默認增長策略是2倍,可自定義增長因子(ArrayList是1.5倍,不可自定義)
public interface List<E> extends Collection<E> { /** 返回當前集合中元素的數量;如果集合中包含的元素數量大于Integer.MAX_VALUE 則直接返回Integer.MAX_VALUE **/ int size(); /** 返回當前集合是否不包含任何元素 **/ boolean isEmpty(); /** 返回一個包含當前集合中所有元素的Object數組 **/ Object[] toArray(); /** 返回一個包含當前集合中所有元素的指定類型T數組 **/ <T> T[] toArray(T[] a); /** 返回當前集合是否包含指定的元素o **/ boolean contains(Object o); /** 返回當前集合是否包含指定集合c中的所有元素 **/ boolean containsAll(Collection<?> c); /** 往當前集合中添加元素e **/ boolean add(E e); /** 往當前集合中指定位置index添加元素e **/ void add(int index, E e); /** 添加指定集合c中的所有元素到當前集合 **/ boolean addAll(Collection<? extends E> c); /** 從當前集合指定位置index開始插入指定集合c中的所有元素 **/ boolean addAll(int index, Collection<? extends E> c); /** 從當前集合中移除指定元素e,如果集合中包含多個相同元素,則移除第一個 **/ boolean remove(Object e); /** 移除當前集合中指定位置index的元素 **/ E remove(int index); /** 從當前集合中移除指定集合c中包含的所有元素 **/ boolean removeAll(Collection<?> c); /** 只保留當前集合與指定集合c中都存在的元素 **/ boolean retainAll(Collection<?> c); /** 移除當前集合中所有的元素 **/ void clear(); /** 將集合中每個元素替換為該元素運算的結果;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())); } } /** 根據給定的排序規則排序集合;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); } } /** 返回當前集合中指定元素的下標 **/ E get(int index); /** 用指定的元素element替換當前集合中指定位置index中的元素 **/ E set(int index, E element); /** 返回當前集合中第一次出現指定元素o的下標位置;如果集合中不包含這個元素,則返回-1 **/ int indexOf(Object o); /** 返回當前集合中最后一次出現指定元素o的下標位置;如果集合中不包含這個元素,則返回-1 **/ int lastIndexOf(Object o); /** 返回當前集合的迭代器 **/ Iterator<E> iterator(); /** 返回當前集合的集合迭代器 **/ ListIterator<E> listIterator(); /** 返回當前集合指定起始位置index的集合迭代器 **/ ListIterator<E> listIterator(int index); /** 返回當前集合指定起始結束位置組成的新的集合 **/ List<E> subList(int fromIndex, int toIndex); /** 返回一個可分割迭代器,增加并行處理能力;繼承自Iterable接口;JDK1.8新增的方法 **/ @Override default Spliterator<E> spliterator() { return Spliterators.spliterator(this, Spliterator.ORDERED); } }
以上就是List基本介紹是什么呢,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。