متد ()sublist چیست؟
Framework مجموعه ها یک جزء بسیار محبوب در Java API است. رابط لیست و کلاس ArrayList احتمالاً مهم ترین ابزارها در چارچوب مجموعه ها هستند. subList روشی در رابط List است که به شما امکان می دهد یک لیست جدید از بخشی از یک لیست موجود ایجاد کنید. با این حال، این لیست تازه ایجاد شده تنها یک نمای با ارجاع به لیست اصلی است.
مثالی از متد 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 در همان لیست می تواند باعث گیرکردن رشته در برنامه جاوا شما شود.
ادامه مطلب: |
---|
GO TO FULL VERSION