CodeGym /Blog Java /Random-PL /Metoda Sublist() w Javie: ArrayList i List
Autor
Milan Vucic
Programming Tutor at Codementor.io

Metoda Sublist() w Javie: ArrayList i List

Opublikowano w grupie Random-PL

Czym jest metoda subList()?

Collections Framework jest bardzo popularnym komponentem Java API. Interfejs List i klasa ArrayList to prawdopodobnie najważniejsze narzędzia w Collections Framework. subList to metoda w interfejsie List, która umożliwia utworzenie nowej listy z części istniejącej listy. Jednak ta nowo utworzona lista jest tylko widokiem z odniesieniem do oryginalnej listy. Metoda Sublist() w Javie: ArrayList i List - 1Weźmy na przykład listę [1,2,3,4,5,6]. Załóżmy, że chcesz utworzyć nową listę bez pierwszego i ostatniego elementu. W takim scenariuszu pomoże Ci metoda list.subList() . metoda subList(fromIndex, toIndex) ma tylko jedną postać i przyjmuje dwa argumenty, którymi są pierwszy indeks (fromIndex) i ostatni indeks(doIndeksu) . Zwróci część między fromIndex a toIndex jako nową listę. Jest ważny punkt do zapamiętania. Nowo utworzona lista będzie zawierała fromIndex i wykluczała toIndex. Algorytm dla powyższego scenariusza będzie wyglądał mniej więcej tak. List = [1,2,3,4,5,6] newList = List.subList(1,5) Ponieważ subList jest metodą interfejsu List, można jej używać na obiektach ArrayList, LinkedList, Stack i Vector. Jednak w tym artykule skupimy się głównie na obiektach ArrayList i LinkedList.

Przykład metody subList na obiekcie ArrayList.

Deklarujemy listę krajów ArrayList. Następnie próbujemy zwrócić część między drugim a czwartym elementem.

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);
    }
 }
Dane wyjściowe powyższego kodu będą
Lista krajów: [USA, Wielka Brytania, Francja, Niemcy, Rosja] Podlista listy: [Wielka Brytania, Francja]
W tablicy ArrayList wartość indeksu pierwszego elementu wynosi 0. W związku z tym wartości indeksu drugiego i czwartego elementu wynoszą odpowiednio 1 i 3. Tak więc wywołujemy metodę sublist() jako list.subList(1, 3) . Pamiętaj jednak, że metoda subList zwraca część z wyłączeniem toIndex, który jest w tym przypadku czwartym elementem („Niemcy”) . W ten sposób wyświetli tylko „Wielka Brytania” i „Francja” . Ponieważ zwracane dane wyjściowe są listami, możesz bezpośrednio na nich wywoływać dowolne metody List. Co się stanie, jeśli użyjemy tego samego indeksu dla obu parametrów? Czy ten indeks zostanie uwzględniony lub wykluczony na zwróconej liście? Dowiedzmy Się.

//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);
Wyjście jest
PodLista listy: [ ]
Dane wyjściowe to pusta lista. Mimo że fromIndex wybiera czwarty element, metoda subList() usunie go, ponieważ jest to również element toIndex.

Przykład metody subList na obiekcie LinkedList.

W tym przykładzie użyjemy metody sublist na elemencie LinkedList. Ponownie zwróci listę między określonym indeksem fromIndex(inclusive) i toIndex(exclusive) . Pamiętaj, że powiedzieliśmy, że lista zwrócona przez metodę subList() jest tylko widokiem, który ma odniesienie do oryginalnej listy. Jeśli wprowadzisz jakiekolwiek zmiany na liście podrzędnej, wpłynie to również na listę pierwotną. Przetestujemy to również w tym przykładzie.

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()+" ");
    }
 }
}
Dane wyjściowe będą wyglądać następująco:
Elementy listy LinkedList: węzeł 1 węzeł 2 węzeł 3 węzeł 4 węzeł 5 węzeł 6 węzeł 7 elementy listy podrzędnej: węzeł 3 węzeł 4 węzeł 5 elementy listy LinkedList LinkedList po usunięciu węzła 4: węzeł 1 węzeł 2 węzeł 3 węzeł 5 węzeł 6 Węzeł 7

Co się stanie, jeśli indeksy są poza zakresem w subList()?

Metoda subList zwraca dwa typy wyjątków. Przyjrzyjmy się im. Rozważmy sytuację, w której określone indeksy są poza zakresem elementu List (fromIndex < 0 || toIndex > size) . Następnie wyrzuci 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
Ponadto, jeśli fromIndex jest większy niż toIndex (fromIndex > toIndex) , metoda subList() zgłasza błąd 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)

Wniosek

W tym artykule omówiliśmy metodę subList i sposób jej użycia. subList() eliminuje potrzebę jawnych operacji na zakresie (jest to rodzaj operacji, które powszechnie istnieją dla tablic). Najważniejszą rzeczą do zapamiętania jest to, że metoda subList nie zwraca nowej instancji, ale widok z odniesieniem do oryginalnej listy. Dlatego nadużywanie metody subList na tej samej liście może spowodować zablokowanie wątku w aplikacji Java.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION