- Java核心編程
- 柳偉衛
- 1451字
- 2020-11-23 15:08:35
4.5 List接口
List是一個有序的Collection,所以有時稱為序列。List可能包含重復元素。除了從Collection繼承的操作之外,List接口還包括以下操作:
· 位置訪問:根據列表中的數字位置操作元素,包括get、set、add、addAll和remove等方法。
· 搜索:搜索列表中的指定對象并返回其數字位置。搜索方法包括indexOf和lastIndexOf。
· 迭代:擴展Iterator語義以利用列表的順序特性。listIterator方法提供此行為。
· 范圍視圖:sublist方法對列表執行任意范圍操作。
Java平臺包含兩個通用的List實現:ArrayList通常是性能更好的實現;而LinkedList在某些情況下提供更好的性能。
4.5.1 集合操作
List繼承自Collection,因此擁有Collection所繼承過來的操作。比如remove操作始終從列表中刪除指定元素的第一個匹配項;add和addAll操作始終將新元素附加到列表的末尾。因此,以下示例用于將一個列表連接到另一個列表。
list1.addAll(list2);
上面的操作是非破壞性的,因為它產生第三個List,其中包含了附加到第一個列表的第二個列表。
如果是使用Java 8及之后的版本,則可以使用Stream將數據聚合到List中。示例如下:
List<String> list = people.stream() .map(Person::getName) .collect(Collectors.toList());
4.5.2 位置訪問和搜索操作
基本的位置訪問操作是get、set、add和remove。其中,set和remove操作返回被覆蓋或刪除的舊值。還有一些操作,比如indexOf和lastIndexOf用于返回列表中指定元素的第一個或最后一個索引。
addAll操作從指定位置開始插入指定Collection的所有元素。元素按指定Collection的迭代器返回的順序插入。
4.5.3 List的迭代器
List的迭代器操作返回的迭代器以適當的順序返回列表的元素。List還提供了一個更豐富的迭代器,稱為ListIterator,它允許在任一方向遍歷列表,在迭代期間修改列表,并獲取迭代器的當前位置。
ListIterator從Iterator繼承了3個方法:hasNext、next和remove。ListIterator還有一個hasPrevious方法,用于操作引用游標之前的元素。
以下是在List中向后迭代的標準用法:

請注意前面的listIterator的參數。List接口有兩種形式的listIterator方法。沒有參數的表單返回位于列表開頭的ListIterator;帶有int參數的表單返回一個位于指定索引處的ListIterator。索引引用初始調用next返回的元素。對previous的初始調用將返回索引為index-1的元素。在長度為n的列表中,索引從0到n(包括0和n),共有n+1個有效值。
直觀地說,游標總是在兩個元素之間——一個將通過調用previous返回,一個將通過調用next返回。n+1個有效索引值對應于元素之間的n+1個間隙,從第一個元素之前的間隙到最后一個元素之后的間隙,圖4-2顯示包含4個元素的列表中的5個可能的游標位置。

圖4-2 5個可能的游標位置
4.5.4 范圍視圖操作
范圍視圖操作subList(int fromIndex,int toIndex)用于返回此列表的部分List視圖,其索引范圍從fromIndex(包括)到toIndex(不包括),這個半開放范圍反映了典型的for循環:

正如術語視圖所暗示的那樣,返回的List由調用了subList的List進行備份,因此前者中的更改將反映在后者中。
此方法消除了對顯式范圍操作的需要(對于數組通常存在的排序),任何期望List的操作都可以通過傳遞subList視圖而不是整個List來用作范圍操作。例如,以下語句從List中刪除一系列元素:
list.subList(fromIndex, toIndex).clear();
可以構造類似的語句以搜索范圍中的元素:
int i = list.subList(fromIndex, toIndex).indexOf(o); int j = list.subList(fromIndex, toIndex).lastIndexOf(o);
注意,前面的語句返回subList中找到的元素的索引,而不是list中的索引。
4.5.5 List常用算法
Collections類中的大多數多態算法專門應用于List。擁有所有這些算法可以很容易地操作列表。下面介紹List的常用算法:
· sort:使用合并排序算法對List進行排序,快速、穩定。穩定排序是指不重新進行相同元素的排序。
· shuffle:隨機置換List中的元素。
· reverse:反轉List中元素的順序。
· rotate:將List中的所有元素旋轉指定的距離。
· swap:交換列表中指定位置的元素。
· replaceAll:將所有出現的一個指定值替換為另一個。
· fill:用指定的值覆蓋List中的每個元素。
· copy:將源列表復制到目標列表。
· binarySearch:使用二進制搜索算法搜索有序List中的元素。
· indexOfSubList:返回一個List的第一個子列表的索引,該列表等于另一個。
· lastIndexOfSubList:返回一個List的最后一個子列表的索引,該列表等于另一個。
- Practical UX Design
- Mastering LibGDX Game Development
- Flutter跨平臺開發入門與實戰
- Unity UI Cookbook
- 51單片機C語言開發教程
- Canvas Cookbook
- OpenCV 3 Blueprints
- Python語言科研繪圖與學術圖表繪制從入門到精通
- Penetration Testing with the Bash shell
- SQL Server實例教程(2008版)
- Clojure編程樂趣
- 前端程序員面試算法寶典
- VMware vRealize Orchestrator Essentials
- Java EE框架開發技術與案例教程
- Raspberry Pi By Example