سلام. در یک روز پاییزی در خدمت شما هستم.در این جلسه آموزشی جاوا قصد داریم یکی از اینترفیس های موجود درفریم ورک 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 fromindex,int toindex) :
این متد بخشی از عناصر یک لیست را از خانه fromindex تا toindex برمی گرداند. عناصر برگردانده شده در قالب یک list می باشد.
توجه کنید که بازه ما به صورت [fromindex,toindex) می باشد ، یعنی هنگام برگردادن بخشی از عناصر لیست، ایندکس fromindex شامل می شود اما toindex شامل نمی شود.
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);
// 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 شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)
لینک دانلودنشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.