کالکشن ها در جاوا: اینترفیس List و پیمایش دوسویی با ListIterator

کالکشن ها در جاوا: اینترفیس List و پیمایش دوسویی با ListIterator

بررسی اینترفیس List

اینترفیس List از اینترفیس Collection ارث‌بری میکنه.

کلاس های

کلاس های ArrayList, Vector و LinkedList در جاوا اینترفیس List رو پیاده‌سازی میکنن و اکثر متدهای این کلاس ها، متد های بازنویسی شده ی اینترفیس List هستند؛ در مطالب بعد به نحوه ی کار با این کلاس ها در جاوا خواهیم پرداخت.

رابطه ارث‌بری اینترفیس List با Collection
رابطه ارث‌بری اینترفیس List با Collection

اینترفیس List علاوه بر متد های Collection که به ارث میبره، متد های اختصاصی خودش هم داره؛ در نمودار UML زیر متد های تعریف شده در کلاس List به همراه توضیحاتشون اورده شده است.

<<interface>>
java.util.List<E>
+add(index: int, element: E): void یک عنصر در index مورد نظر اضافه میکنه.
+addAll(index: int, c: Collection<? extends E> تمام عناصر Collection رو از شماره index به بعد وارد List میکنه.
+get(index: int): E عنصر موجود در index مورد نظر رو بر میگردونه.
+indexOf(o: Object): int index اولین عنصر مطابق با آبجکت o رو بر میگردونه.
+lastIndexOf(o: Object): int index آخرین عنصر مطابق با آبجکت o رو بر میگردونه.
+listIterator(): ListIterator یک نمونه از ListIterator رو بر میگردونه؛ اینترفیس ListIterator از Iterator ارث‌بری می کنه.
+listIterator(index: int): ListIterator یک نمونه از ListIterator رو بر میگردونه و شروع پیمایش توسط ListIterator از شماره index خواهد بود.
+remove(index: int): E عنصر موجود در شماره index مورد نظر رو حذف کرده و بر میگردونه.
+subList(fromIndex: int, toIndex: int): List<E> یک List جدید از fromIndex تا toIndex - 1 از عناصر List فعلی رو بر میگردونه؛ index آخرین عنصر (size - 1) است.
+set(index: int, e: E): E عنصر e رو جایگزین عنصر موجود در index مورد نظر میکنه و عنصر قدیمی رو بر میگردونه.

پیمایش در List با ListIterator

در مطلب Collection به Iterator پرداختیم، در این قسمت میخوایم به ListIterator بپردازیم.

اینترفیس ListIterator از Iterator ارث‌بری میکنه و باهاش میشه به پیمایش دوسویی در پیاده‌سازی های List پرداخت.

رابطه ارث‌بری ListIterator با Iterator در جاوا
رابطه ارث‌بری ListIterator با Iterator در جاوا

در اینترفیس ListIterator، علاوه بر متد های Iterator که ازش ارث بری میکنه، متد های جدیدی تعریف شده است.

در نمودار UML زیر متد های تعریف شده در ListIterator شرح داده شده است.

<<interface>>
java.util.ListIterator
+add(e: E): void یک عنصر رو به List اضافه میکنه؛ عنصر جدید به قبل از عنصر بعدی که با next صدا زده میشه اضافه میشه.
+hasPrevious(): boolean اگه به اولین عنصر در لیست رسیده باشیم مقدار false رو بر میگردونه.
+nextIndex(): int شماره index عنصر بعدی رو بر میگردونه.
+previous(): E عنصر قبلی رو بر می گردونه.
+previousIndex(): int index عنصر قبلی رو بر میگردونه.

در مثال زیر میخوایم با ListIterator به پیمایش در LinkedList بپردازیم.

List<String> colors = new ArrayList<>();
colors.add("Blue");
colors.add("Pink");
colors.add("Purple");
colors.addFirst("Cyan");
colors.add(1, "Red");
colors.removeLast();
colors.addLast("Yellow");

ListIterator<String> listIterator = colors.listIterator();

System.out.println("Display color forward: ");

while(listIterator.hasNext())
  System.out.print(listIterator.next());

System.out.println();

System.out.println("Display color backward: ");

while(listIterator.hasPrevious())
  System.out.print(listIterator.previous());
        

خلاصه

  • کلاس های ArrayList, Vector و LinkedList اینترفیس List رو پیاده سازی میکنن.
  • اینترفیس ListIterator از اینترفیس Iterator ارث بری میکنه و باهاش میتونیم به صورت دوسویی به پیمایش در پیاده‌سازی های List بپردازیم.

بازخورد و دیدگاه‌ ها

اولین نفری باشید که در این صفحه نظر می‌دهید

notifications برای اطلاع از جدیدترین مطالب و پست های مرتبط، عضو کانال تلگرام ما بشید.

arrow_drop_up
کپی شد!