CodeGym /وبلاگ جاوا /Random-FA /متد Sublist() در جاوا: ArrayList و List
John Squirrels
مرحله
San Francisco

متد Sublist() در جاوا: ArrayList و List

در گروه منتشر شد

متد ()sublist چیست؟

Framework مجموعه ها یک جزء بسیار محبوب در Java API است. رابط لیست و کلاس ArrayList احتمالاً مهم ترین ابزارها در چارچوب مجموعه ها هستند. subList روشی در رابط List است که به شما امکان می دهد یک لیست جدید از بخشی از یک لیست موجود ایجاد کنید. با این حال، این لیست تازه ایجاد شده تنها یک نمای با ارجاع به لیست اصلی است. متد Sublist() در جاوا: ArrayList و List - 1به عنوان مثال فهرست [1،2،3،4،5،6] را در نظر بگیرید. فرض کنید می خواهید یک لیست جدید بدون اولین و آخرین عنصر ایجاد کنید. در چنین سناریویی، متد list.subList() به شما کمک خواهد کرد. متد subList(fromIndex, toIndex) فقط یک شکل دارد و دو آرگومان می گیرد که اولین شاخص (fromIndex) و آخرین شاخص (toIndex) هستند . بخش بین 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);
    }
 }
خروجی کد بالا خواهد بود
فهرست کشورها: [ایالات متحده آمریکا، بریتانیا، فرانسه، آلمان، روسیه] فهرست فرعی فهرست: [بریتانیا، فرانسه]
در یک ArrayList، مقدار شاخص عنصر اول 0 است. بنابراین، مقادیر شاخص عنصر دوم و چهارم به ترتیب 1 و 3 است. بنابراین، ما متد sublist() را به صورت list.subList(1, 3) فراخوانی می کنیم . با این حال، به یاد داشته باشید که متد subList بخشی را به استثنای toIndex که عنصر چهارم ("آلمان") در این مورد است، برمی گرداند. بنابراین تنها "بریتانیا" و "فرانسه" را تولید خواهد کرد . از آنجایی که خروجی برگشتی خود یک 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 عنصر چهارم را انتخاب می کند، متد ()subList آن را حذف می کند زیرا toIndex نیز هست.

مثالی از متد subList در یک شی LinkedList.

در این مثال، از متد sublist در عنصر LinkedList استفاده خواهیم کرد. مجدداً، لیستی را بین نمایه مشخص شده از Index (شامل) و toIndex (انحصاری) برمی گرداند . به یاد داشته باشید که گفتیم لیستی که توسط متد ()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()+" ");
    }
 }
}
خروجی به شکل زیر خواهد بود:
عناصر LinkedList: Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Elements of the sublist: Node 3 Node 4 Node 5 Elements of LinkedList LinkedList پس از حذف نود 4: گره 1 گره 2 گره 3 گره 5 گره 6 گره 7

اگر ایندکس ها در subList() خارج از محدوده باشند چه اتفاقی می افتد؟

متد subList دو نوع استثنا را برمی گرداند. بیایید نگاهی به آنها بیندازیم. وضعیتی را در نظر بگیرید که نمایه های مشخص شده خارج از محدوده عنصر List هستند (ازIndex < 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 در همان لیست می تواند باعث گیرکردن رشته در برنامه جاوا شما شود.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION