官术网_书友最值得收藏!

  • 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的最后一個子列表的索引,該列表等于另一個。

主站蜘蛛池模板: 天津市| 朝阳市| 绵竹市| 景谷| 邯郸市| 江西省| 辉县市| 保亭| 宜章县| 河东区| 巴彦淖尔市| 镇巴县| 原平市| 府谷县| 桦南县| 滕州市| 新泰市| 文化| 榆树市| 汤原县| 兰坪| 碌曲县| 沛县| 连城县| 博乐市| 汝城县| 睢宁县| 达日县| 仁化县| 临高县| 磐安县| 西宁市| 南城县| 黑龙江省| 卢龙县| 黔西县| 乐平市| 都江堰市| 宾阳县| 甘泉县| 洪泽县|