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都是線程不安全的。