CodeGym /Java блог /Случаен /Метод Sublist() в Java: ArrayList и List
John Squirrels
Ниво
San Francisco

Метод Sublist() в Java: ArrayList и List

Публикувано в групата

Какво представлява методът subList()?

Collections Framework е много популярен компонент в Java API. Интерфейсът на списъка и класът ArrayList са може би най-важните инструменти в рамката на колекциите. subList е метод в интерфейса List, който ви позволява да създадете нов списък от част от съществуващ списък. Този новосъздаден списък обаче е само изглед с препратка към оригиналния списък. Метод Sublist() в Java: ArrayList и List - 1Например вземете списъка с [1,2,3,4,5,6]. Да предположим, че искате да създадете нов списък без първия и последния елемент. В такъв сценарий методът list.subList() ще ви помогне. методът subList(fromIndex, toIndex) има само една форма и приема два аргумента, които са първият индекс (fromIndex) и последният индекс(къмИндекс) . Той ще върне частта между fromIndex и toIndex като нов списък. Трябва да запомните един важен момент. Новосъздаденият списък ще включва fromIndex и ще изключва toIndex. Така че алгоритъмът за горния сценарий ще бъде нещо подобно. List = [1,2,3,4,5,6] newList = List.subList(1,5) Тъй като subList е метод на интерфейс List, можете да го използвате в ArrayList, LinkedList, Stack и Vector обекти. В тази статия обаче ще се съсредоточим основно върху обектите ArrayList и LinkedList.

Пример за метода subList на обект ArrayList.

Ние декларираме 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);
    }
 }
Резултатът от горния code ще бъде
Списък на държавите: [САЩ, Обединеното кралство, Франция, Германия, Русия] Подсписъкът на списъка: [Обединеното кралство, Франция]
В ArrayList стойността на индекса на първия елемент е 0. Следователно стойностите на индекса на втория и четвъртия елемент са съответно 1 и 3. И така, ние извикваме метода sublist() като list.subList(1, 3) . Не забравяйте обаче, че методът subList връща частта, изключваща toIndex, който е четвъртият елемент („Германия“) в този случай. По този начин ще изведе само „UK“ и „France“ . Тъй като върнатият изход е самият списък, можете да извиквате всеки метод на списък директно върху него. И така, Howво ще се случи, ако използваме един и същ индекс и за двата параметъра? Този индекс ще бъде ли включен or изключен в върнатия списък? Нека разберем.

//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.

Пример за метода subList на обект LinkedList.

В този пример ще използваме метода подсписък на елемент LinkedList. Отново ще върне списъка между посочения индекс fromIndex(включително) и toIndex(изключително) . Не забравяйте, че казахме, че списъкът, върнат от метода subList() , е само изглед, който има препратка към оригиналния списък. Ако направите няHowви промени в подсписъка, това ще се отрази и на оригиналния списък. Ще тестваме и това в този пример.

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()+" ");
    }
 }
}
Резултатът ще изглежда така:
Елементи на LinkedList: възел 1 възел 2 възел 3 възел 4 възел 5 възел 6 възел 7 Елементи на подсписъка: възел 3 възел 4 възел 5 Елементи на LinkedList LinkedList След премахване на възел 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 и How да го използваме. Методът subList() елиминира необходимостта от изрични операции с диапазон (Това е тип операции, които обикновено съществуват за масиви). Най-важното нещо, което трябва да запомните е, че методът subList не връща нов екземпляр, а изглед с препратка към оригиналния списък. Следователно прекомерното използване на метода subList в същия списък може да доведе до блокиране на нишка във вашето Java приложение.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION