سلام. در یک روز پاییزی در خدمت شما هستم.در این جلسه آموزشی جاوا قصد داریم یکی از اینترفیس های موجود درفریم ورک Collection را بررسی کنیم.
List Interface طبق نمودار موجود در تصویر(1) اینترفیس List فرزند اینترفیس Collection در جاوا است. List دارای متدهایی است که از طریق آنها میتوان عناصر را بر اساس ایندکس هایشان (شماره خانه شان) درج یا حذف کرد.
• چرا اینترفیس List فرزند اینترفیس Collection است؟ زیرا اینترفیس List اینترفیس Collection را extends کرده است.
• اینترفیس List توسط کلاس های ArrayList، LinkedList، Vector و Stack پیاده سازی یا implements شده است. به دلیل این که List اینترفیس است، هنگام شی سازی از آن میتوانیم از سازنده های کلاس های ArrayList، LinkedList، Vector و Stack کمک بگیریم.
ایجاد اشیا از List : همان طور که میدانید List یک اینترفیس است و ما نمیتوانیم مستقیم از آن شی ایجاد کنیم. به روش های زیر میتوانیم از یک List شی ایجاد کنیم:
List<String> a = new ArrayList<String>();
List<String> b = new LinkedList<String>();
List<String> c = new Vector<String>();
List<String> d = new Stack<String>();
• کافی است که نوع شی از نوع اینترفیس List و سازنده آن از یکی از کلاس های ArrayList، LinkedList، Vector و Stack باشد.
• ما در جلسات آینده کلاس های Vectorو Stack را بررسی خواهیم کرد. البته شما هم باید پی گیر و مطالبه گر باشید 😊😊
• تگ <> کنار نام List برای مشخص کردن نوع عناصری است که قراره در List ما ذخیره شوند. این نوع میتواند عدد، رشته، نام کلاسی خاص و... باشد.
• ما به روش معمولی از List شی ایجاد میکنیم با این تفاوت که سازنده آن، از یکی کلاس های ArrayList، LinkedList، Vector و Stack است، مثلا:
List a = new ArrayList();
حالا نوع عناصر List را میان دو تگ <> کنار نام List و نام سازنده آن قرار میدهیم.
List<String>a = new ArrayList<String>();
برای استفاده از List در برنامه خود باید پکیج زیر را بالای سر کلاس خود import کنید:
import java.util.List;
همچنین در صورت استفاده از سازنده یکی از کلاس ArrayList، LinkedList، Vector و Stack باید پکیج های مربوط آنها را نیز در برنامه خود import کنید:
یک عنصر را در خانه مشخص ( index ) از لیست درج میکند.
2
boolean addAll(int index ,Collection c)
همه عناصر موجود در Collection (مجموعه) c را از خانه index ام به بعد لیست اضاف میکند.
کلاس های ArrayList و LinkedList و... یک Collection حساب میشوند.
3
object get(int index )
عنصر ذخیره شده در خانه index ام لیست را برمی گرداند.
4
object set(int index ,Object element)
عنصر مورد نظر را به خانه index ام لیست اختصاص میدهد.
5
object remove(int index )
عنصر مورد نظر در خانه index ام لیست را حذف میکند.
مقدار عنصر را نیز بعد از حذف به ما پس میدهد.
6
ListIterator listIterator()
برای پیمایش یک لیست از آن استفاده میکنیم
7
ListIterator listIterator(int index )
برای پیمایش یک لیست از خانه index ام به بعد استفاده میشود.
مثلا قصد دارید بجای خانه صفرم، از خانه سوم به بعد شروع به پیمایش یک لیست کنید کافیست مقدار پارامتر این متد را 3 قرار دهید.
Example:
package list;
import java.util.*;
public class ListExample { public static void main(String args[]) {
List<String> al = new ArrayList<String>(); al.add("hasan"); al.add("ali"); al.add("sara"); al.add(1, "maryam");
System.out.println("Element at 2nd position: " + al.get(2)); for (String s : al) {
System.out.println(s);
}
}
}
خروجی ( output):
Element at 2nd position: ali
hasan
maryam
ali
sara
توضیحات:
List<String> al = new ArrayList<String>();
• یک شی از List با استفاده از سازنده کلاس ArrayList ایجاد کرده ایم. عناصری که لیست ما میتواند ذخیره کند از نوع String است.
al.add("hasan"); al.add("ali"); al.add("sara");
• متد add عنصر مورد نظر را به لیست اضاف میکند.به گونه ای که هر عنصر بعد از آخرین عنصر موجود در لیست قرار میگیرد. در اینجا عنصر "hasan" در خانه صفرم و عنصر "ali" در خانه یکم و عنصر "sara" در خانه بعد از عنصر "ali" یعنی خانه دوم قرار گرفته است.
al.add(1, "maryam");
این دستور عنصر "maryam" را به خانه یکم اضاف میکند، همان طور که میدانید در خانه یکم عنصر "ali" قرار داشت، با این کار عنصر "ali" جابه جا شده و به خانه دوم منتقل میشه و عنصر "sara" نیز به خانه سوم منتقل میشه و "maryam" در خانه یکم قرار میگیرد.
System.out.println("Element at 2nd position: " + al.get(2));
• عنصر مورد نظر در خانه دوم لیست را برمی گرداند.
for (String s : al) {
System.out.println(s);
}
• برای پیمایش لیست از حلقه for-each استفاده کرده ایم. این حلقه رو در جلسات قبل توضیح داده ایم.
ListIterator Interface اینترفیس ListIterator برای پیمایش رو به جلو و رو به عقب عناصر یک لیست استفاده میشود.
اینترفیس ListIterator، اینترفیس Iterator را extends کرده است.
برای استفاده از اینترفیس ListIterator، باید پکیج زیر را import کنید:
import java.util.ListIterator;
متدهای اینترفیس ListIterator :
شماره
متد
توضیح
1
boolean hasNext()
وقتی که در حال پیمایش رو به جلو لیست هستیم، این متد چک میکند آیا عنصری بعد از عنصر فعلی وجود دارد یا خیر. در صورت وجود مقدار true برمی گرداند.
برای بررسی شرط وجود عنصر در لیست از این متد استفاده میشود.
2
Object next()
عنصر بعد از عنصر فعلی را برمی گرداند.
3
boolean hasPrevious()
وقتی که در حال پیمایش رو به عقب لیست هستیم، این متد چک میکند که ایا عنصری قبل از عنصر فعلی وجود دارد یا خیر. ( در کل برای چک کردن وجود عنصر در لیست است)
برای پیمایش معکوس یک لیست از این متد استفاده میکنیم. منظور از پیمایش معکوس این است که از آخر به اول لیست را پیمایش میکنیم.
4
Object previous()
عنصر قبل از عنصر فعلی را برمی گرداند.
• روش استفاده از امکانات اینترفیس ListIterator، برای پیمایش یک لیست را در مثال زیر میتوانید ببینید:
Example:
package list;
import java.util.*;
public class TestCollection8 { public static void main(String args[]) {
List<String> al = new ArrayList<String>(); al.add("hasan"); al.add("ali"); al.add("sara"); al.add(1, "maryam");
System.out.println("element at 2nd position: " + al.get(2));
ListIterator<String> itr = al.listIterator();
System.out.println("traversing elements in forward direction..."); while (itr.hasNext()) {
System.out.println(itr.next());
}
System.out.println("traFversing elements in backward direction..."); while (itr.hasPrevious()) {
System.out.println(itr.previous());
}
}
}
خروجی ( output):
element at 2nd position: ali
traversing elements in forward direction...
hasan
maryam
ali
sara
traFversing elements in backward direction...
sara
ali
maryam
hasan
توضیحات:
ListIterator<String> itr = al.listIterator();
برای پیمایش لیست خود با استفاده از اینترفیس ListIterator، به روش بالا از ListIterator شی ایجاد میکنیم.
1. نام اینترفیس ListIterator را تایپ میکنیم.
2. نوع عناصر لیستی که قراره پیمایش شوند را بین دو تگ <> قرار میدهیم. نوع عناصر لیست ما از نوع String بود به همین خاطر <String> را در کنار نام اینترفیس ListIterator قرار داده ایم.
3. یک نام به دلخواه برای پیمایشگر خود انتخاب میکنیم.
4. با استفاده از شی از نوع List متد ()listIterator صدا میزنیم.
• قالب کلی ایجاد یک پیمایشگر ListIterator به صورت زیر است:
1. تعیین نوع عناصری که قرار پیمایش شود.
2. انتخاب یک نام دلخواه
3. قرار دادن شی از نوع لیستی که قراره پیمایش شود.
حالا ایجاد یک حلقه برای پیمایش رو به جلو ( شروع پیمایش از ابتدا تا انتهای لیست):
1. شرط حلقه، چک میکند که آیا عنصری بعد از عنصر فعلی وجود دارد یا خیر. در کل برای بررسی وجود عنصر در لیست است و این که به انتهای لیست رسیدیم یا خیر.
2. با هر بار صدا زدن متد next عنصر بعد از عنصر فعلی برگردانده و سپس چاپ میشود.
ایجاد یک حلقه برای پیمایش رو به عقب لیست ( شروع پیمایش از انتها تا ابتدای لیست):
1. بررسی میکند، قبل از عنصر فعلی، عنصری دیگر وجود دارد یا خیر. در کل چک میکند به ابتدای لیست رسیدیم یا خیر.
2. این دستور عنصر قبل از عنصر فعلی را به ما میدهد و مقدارش را چاپ میکند.
پایان توضیحات مثال
متد List subList(int from index ,int to index ) :
این متد بخشی از عناصر یک لیست را از خانه from index تا to index برمی گرداند. عناصر برگردانده شده در قالب یک list است.
توجه کنید که بازه ما به صورت [ from index ,to index ) است، یعنی هنگام برگردادن بخشی از عناصر لیست، ایندکس from index شامل میشود اما to index شامل نمیشود.
Example:
package list;
// Java program to demonstrate subList operation // on List interface. import java.util.*;
public class ListDemo { public static void main(String[] args) { // Type safe array list, stores only string
List<String> l = new ArrayList<String>(5);
l.add("javapro"); l.add("java like "); l.add("java"); l.add(" like "); l.add("tutorial");
List<String> range = new ArrayList<String>();
// return List between 2nd(including) // and 4th element(excluding) range = l.subList(2, 4);
System.out.println(range); //[java, like ]
}
}
خروجی ( output):
[java, like ]
• در این مثال عناصر موجود در بازه [2,4) لیست را برگردانده ایم. بازه [2,4) شامل خانه های دوم و سوم لیست میشود و شامل خانه چهام نمیشود.
حتما برای تسلط بر این مفاهیم باید مثال های متعدد ببینید و حل کنید.
پیروز و موفق باشید این جلسه آموزشی را میتوانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)
لینک دانلودنشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.