11 Java集合 - List與Queue集合

11.1 List集合

? ? ? ? List集合代表一個元素有序、可重復的集合,集合中的每個元素都有其對應的順序索引。List集合允許元素重復,可以使用索引指定位置的元素。List集合默認按元素的添加順序設值元素的索引。

????List判斷兩個對象相等的標準:通過equals方法比較返回true即可。

? ? List集合增加的操作集合元素的方法:

? ? ? ? - void add(int index, Object o);?將元素插入到List集合的index處。

? ? ? ? - boolean addAll(int index, Collection c):將集合c所包含的所有元素都插入到List?集合的index處。

? ? ? ? - Object?get(int?index):返回集合index索引處的元素。

? ? ? ? - int?indexOf(Object o):返回對象o在List?集臺中第一次出現(xiàn)的位置索引。

? ? ? ? - int lastIndexOf(Object o):返回對象在List 集合中最后一次出現(xiàn)的位置索引。

? ? ? ? - Object?remove(int?index):刪除并返回index索引處的元素。

? ? ? ? - Object?set(int?index, Objcct element):將index?索引處的元素替換成element?對象,返回新元素。

? ? ? ? - List?subList(int?fromIndex, int toIndex):返回從索引fromIndex?(包含)?到索引tolndex?(不包含)

處所有集合元素組成的子集合。

? ? Java8新增如下兩個默認方法:

? ? ? ? - void replaceAll(UnaryOperator operator):根據(jù)operator指定的計算規(guī)則重新設置List集合中的所有元素。

? ? ? ? - void sort(Comparator c):根據(jù)Comparator參數(shù)對集合元素排序。

11.2 ListInterator接口

? ? ? ? List提供了一個listIterator()方法,該方法返回一個ListIterator對象,ListIterator接口繼承了Iterator接口,提供了專門操作List的方法。

? ??ListIterator新增如下方法:

? ? ? ? - boolean hasPrevious():判斷迭代器關聯(lián)的集合是否還有上一個元素。

? ? ? ? - Object previous():返回該迭代器的上一個元素。

? ? ? ? - void add(Object o):在指定位置插入一個元素。

11.3 ArrayList類

? ? ? ? ArrayList類完全支持List接口的全部功能。

? ? ? ? ArrayList類基于數(shù)組實現(xiàn),使用initialCapacity參數(shù)來設置該數(shù)組的長度,當元素數(shù)量超出數(shù)組長度時,initialCapacity會自動增加。ArrayList類的initialCapacity值在創(chuàng)建時默認為10,也可以在構造器中指定initialCapacity值。

????ArrayList類采用如下方法重新分配數(shù)組長度:

????????- void ensureCapacity(int minCapacity):將底層數(shù)組進行擴容,若minCapacity比底層數(shù)組長度的1.5倍+1還大,則底層數(shù)組長度設置為minCapacity,否則設置為底層數(shù)組長度的1.5倍+1。

? ? ? ? - void trimToSize():調整底層數(shù)組長度為當前元素的個數(shù)。

11.4 Queue集合

? ? ? ? Queue用于模擬隊列這種數(shù)據(jù)結構,采用先進先出的策略。

? ? Queue集合新增的方法:

? ? ? ? - void add(Object o):將指定元素加入隊列尾部。

? ? ? ? - Object element():查看隊頭元素,不出隊。

? ? ? ? - Object remove():獲取隊頭元素并出隊。

? ? ? ? - boolean offer(Object o):入隊,有容量限制的隊列中,此方法比add高效。

? ? ? ? - Object peek():查看隊頭元素,不出隊。

? ? ? ? - Object poll():獲取隊頭元素并出隊。

11.5 PriorityQueue類

????????PriorityQueue類按隊列元素的大小對元素進行重新排序,出隊時返回的是隊列中最小的元素。PriorityQueue使用自然排序或定制排序兩種方式對元素進行排序,不允許插入null元素。

11.6 Deque接口

? ? ? ? Deque接口繼承Queue接口,代表雙端隊列,允許從兩端來操作隊列的元素。

? ? Deque接口新增如下方法:

? ? ? ? - void addFirst(Object o):將指定元素插入該雙端隊列的開頭。

? ? ? ? - void addLast(Object o):將指定元素插入該雙端隊列的末尾。

? ? ? ? - Iterator descendingIterator():返回該雙端隊列對應的迭代器,該迭代器將以逆向順序來迭代隊列中的元素。

? ? ? ? - Object getFirst():獲取但不刪除雙端隊列的第一個元素。

? ? ? ? - Object getLast():獲取但不刪除雙端隊列的最后一個元素。

????????- Object removeFirst():獲取并刪除該雙端隊列的第一個元素。

? ? ? ? - Object removeLast():獲取并刪除該雙端隊列的最后一個元素。

? ? ????- Object removeFirstOccurrence(Object o):刪除該雙端隊列的第一次出現(xiàn)的元素o。

????????-?Object removeLastOccurrence(Object o):刪除該雙端隊列的最后一次出現(xiàn)的元素o。

? ? ? ? - boolean offerFirst(Object o):將指定元素插入該雙端隊列的開頭。

? ? ? ? - boolean offerLast(Object o):將指定元素插入該雙端隊列的末尾。

? ? ? ? - Object peekFirst():獲取但不刪除該雙端隊列的第一個元素;隊列為空返回null。

? ? ? ? - Obiect peekLast():獲取但不刪除該雙端隊列的最后一個元素;隊列為空返回null。

? ? ? ? - Obiect pollFirst():獲取并刪除該雙端隊列的第一個元素;隊列為空返回null。

? ? ? ? - Object pollLast():獲取并刪除該雙端隊列的最后一個元素;隊列為空返回null。

? ? ? ? - Object pop()(棧方法):出棧。相當于removeFirst()。

? ? ? ? - void?push(Object?e)(棧方法):壓棧。相當于addFirst(Object o)。

11.7?ArrayDeque類

? ? ? ? ArrayDeque類是Deque接口的實現(xiàn)類,基于數(shù)組實現(xiàn),底層數(shù)組的長度默認是16。ArrayDeque既可以作為棧使用,又可以作為隊列使用。

11.8 LinkedList類

? ? ? ? LinkedList實現(xiàn)了List接口和Deque接口,所以可以作為List集合、雙向隊列、棧使用。內部以鏈表的的形式實現(xiàn),可以隨機訪問結合中元素。

11.9 各種線性表的性能分析

? ? ? ? List接口具有ArrayList和LinkedList兩種典型實現(xiàn)。ArrayList基于數(shù)組實現(xiàn),隨機訪問時性能較好,因此建議使用for循環(huán)與get來遍歷;LinkedList基于鏈表,執(zhí)行插入、刪除時具有較好的性能,但隨機訪問時性能不好,應該是用Iterator遍歷。

? ? ? ? ArrayList與LinkedList都是線程不安全的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容