CodeGym /Java Blog /Toto sisi /Java 中的 Sublist() 方法:ArrayList 和 List
John Squirrels
等級 41
San Francisco

Java 中的 Sublist() 方法:ArrayList 和 List

在 Toto sisi 群組發布

什麼是 subList() 方法?

集合框架是 Java API 中非常流行的組件。List 接口和 ArrayList 類可能是 Collections Framework 中最重要的工具。subList是 List 接口中的一種方法,可讓您從現有列表的一部分創建新列表。但是,這個新創建的列表只是一個引用原始列表的視圖。Java 中的 Sublist() 方法:ArrayList 和 List - 1例如,以 [1,2,3,4,5,6] 的列表為例。假設您要創建一個沒有第一個和最後一個元素的新列表。在這種情況下,list.subList()方法會幫助你。subList(fromIndex, toIndex)方法只有一種形式,它有兩個參數,分別是第一個索引(fromIndex)和最後一個索引(到索引)它會將fromIndextoIndex之間的部分作為新列表返回。有一點要記住。新創建的列表將包含 fromIndex 並排除 toIndex。所以上述場景的算法將是這樣的。List = [1,2,3,4,5,6] newList = List.subList(1,5) 由於subList是List 接口的方法,因此可以在ArrayList、LinkedList、Stack 和Vector 對像上使用它。但是,在本文中,我們將主要關注 ArrayList 和 LinkedList 對象。

ArrayList 對象的 subList 方法示例。

我們正在聲明一個國家 ArrayList。然後我們嘗試返回第 2 個和第 4 個元素之間的部分。

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
         // create an ArrayList 
        ArrayList list = new ArrayList();
         // add values to ArrayList
         list.add("USA");
         list.add("UK");
         list.add("France");
         list.add("Germany");
         list.add("Russia");
        System.out.println("List of the countries:" + list);
         //Return the subList : 1 inclusive and 3 exclusive
        ArrayList new_list = new  ArrayList(list.subList(1, 3));
        System.out.println("The subList of the list: "+new_list);
    }
 }
上面代碼的輸出將是
國家列表:[美國、英國、法國、德國、俄羅斯] 列表子列表:[英國、法國]
在ArrayList中,第一個元素的索引值為0。因此,第二個和第四個元素的索引值分別為1和3。因此,我們調用sublist()方法作為list.subList(1, 3)。但是,請記住 subList 方法返回不包括 toIndex 的部分,在本例中是第四個元素(“Germany”) 。因此它只會輸出“UK”“France”。由於返回的輸出是一個 List 本身,您可以直接在其上調用任何 List 方法。那麼如果我們對兩個參數使用相同的索引會發生什麼?該索引將包含或排除在返回列表中嗎?讓我們找出來。

//execute subList() method with the same argument for both parameters.
ArrayList new_list2 = new ArrayList(list.subList(3, 3));
System.out.println("The subList of the list: "+new_list2);
輸出是
列表的子列表:[ ]
輸出是一個空列表。即使 fromIndex 選擇了第 4 個元素,subList()方法也會將其刪除,因為它也是 toIndex。

LinkedList 對像上的 subList 方法示例。

在此示例中,我們將在 LinkedList 元素上使用 sublist 方法。同樣,它將返回指定索引fromIndex(inclusive)toIndex(exclusive)之間的列表。請記住,我們說過subList()方法返回的列表只是一個具有對原始列表的引用的視圖。如果您對子列表進行任何更改,它也會影響原始列表。我們也將在這個例子中測試它。

import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
 
public class Main {
 
 public static void main(String[] args) {
 
    // Create a LinkedList
    LinkedList linkedlist = new LinkedList();
 
    // Add elements to LinkedList
    for(int i = 0; i<7; i++){
      linkedlist.add("Node "+ (i+1));
    }
 
    // Displaying LinkedList elements
    System.out.println("Elements of the LinkedList:");
    Iterator it= linkedlist.iterator();
    while(it.hasNext()){
       System.out.print(it.next()+ " ");
    }
 
    // invoke subList() method on the linkedList
    List sublist = linkedlist.subList(2,5);
 
    // Displaying SubList elements
    System.out.println("\nElements of the sublist:");
    Iterator subit= sublist.iterator();
    while(subit.hasNext()){
       System.out.print(subit.next()+" ");
    }
 
    /* The changes you made to the sublist will affect the     original LinkedList
     * Let’s take this example - We
     * will remove the element "Node 4" from the sublist.
     * Then we will print the original LinkedList. 
     * Node 4 will not be in the original LinkedList too. 
     */
    sublist.remove("Node 4");
    System.out.println("\nElements of the LinkedList LinkedList After removing Node 4:");
    Iterator it2= linkedlist.iterator();
    while(it2.hasNext()){
       System.out.print(it2.next()+" ");
    }
 }
}
輸出將如下所示:
鍊錶的元素: 節點1 節點2 節點3 節點4 節點5 節點6 節點7 子列表的元素: 節點3 節點4 節點5 鍊錶的元素刪除節點4 後的鍊錶: 節點1 節點2 節點3 節點5 節點6節點 7

如果 subList() 中的索引超出範圍會發生什麼?

subList方法返回兩種類型的異常讓我們來看看它們。考慮指定索引超出 List 元素範圍(fromIndex < 0 || toIndex > size)的情況。然後它會拋出一個IndexOutOfBoundExecption

//using subList() method with fromIndex <0 
ArrayList new_list2 = new ArrayList(list.subList(-1, 3));
System.out.println("Portion of the list: "+new_list2);
 
Exception in thread "main" java.lang.IndexOutOfBoundsException: fromIndex = -1
 
// using subList() method with toIndex > size
ArrayList new_list2 = new ArrayList(list.subList(3, 6));
System.out.println("Portion of the list: "+new_list2);
 
Exception in thread "main" java.lang.IndexOutOfBoundsException: toIndex = 6
此外,如果 fromIndex 大於 toIndex (fromIndex > toIndex),則subList()方法會拋出IllegalArgumentException錯誤。

//If fromIndex > toIndex
ArrayList new_list2 = new ArrayList(list.subList(5, 3));
System.out.println("Portion of the list: "+new_list2);
 
Exception in thread "main" java.lang.IllegalArgumentException: fromIndex(5) > toIndex(3)

結論

在本文中,我們討論了subList方法及其使用方法。subList()方法消除了對顯式範圍操作的需要(這是數組通常存在的一種操作)。最重要的是要記住 subList 方法不返回新實例,而是返回一個引用原始列表的視圖。因此,在同一個列表上過度使用subList方法會導致線程卡在 Java 應用程序中。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION