Javaالكلاس LinkedList في جافا
- مقدمة
- كونستركتورات الكلاس LinkedList
- دوال الكلاس LinkedList
- أمثلة شاملة
مقدمة
الكلاس LinkedList يستخدم لإنشاء مصفوفات متطورة مقارنةً مع المصفوفات العادية Arrays, حيث يوفر لك مجموعة من الدوال التي تمكنك من البحث فيها, التشييك على عناصرها, إضافة عناصر جديدة, حذف عناصر منها, و معالجة أكثر من عنصر فيها في نفس الوقت إلخ..
أهم ميزة في المصفوفات التي نوعها LinkedList هي أن عدد العناصر فيها غير ثابت, حيث أنه يزيد عند إضافة عنصر جديد فيها و ينقص عند حذف عنصر منها بشكل تلقائي, و هذه الميزة غير موجودة في المصفوفات العادية.
كما أنك تستطيع الوصول للعناصر الموجودة فيها عن طريق أرقام الـ Index التي تعطى بالترتيب لكل عنصر يضاف فيها.
بناؤه
إذاً الكلاس LinkedList يرث من الكلاس AbstractSequentialList, و يطبق الإنترفيسات List - Deque - Cloneable - Serializable.
الفرق بين الكلاس LinkedList و الكلاس ArrayList
الكلاس LinkedList يشبه كثيراً الكلاس ArrayList, الفرق بينهما هو التالي:
- مترجم لغة جافا يعامل الكلاس LinkedList بشكل أسرع من الكلاس ArrayList.
- الكلاس LinkedList يملك دوال للحذف و الإضافة ليست موجودة في الكلاس ArrayList.
- الكلاس LinkedList يحتل مساحة أكبر في الذاكرة مقارنةً مع المساحة التي يحتلها الكلاس ArrayList.
كونستركتورات الكلاس LinkedList
الجدول التالي يحتوي على جميع الكونستركتورات الموجودين في الكلاس LinkedList.
الكونستركتور مع تعريفه | |
---|---|
1 | public LinkedList() هذا الكونستركتور الإفتراضي في الكلاس LinkedList, يستخدم لإنشاء كائن نوعه LinkedList فارغ. |
2 | public LinkedList(Collection c) يستخدم هذا الكونستركتور لإنشاء كائن نوعه LinkedList يحتوي على عناصر كائن الـ Collection الذي نمرره له كـ Argument. |
دوال الكلاس LinkedList
الجدول التالي يحتوي على جميع دوال الكلاس LinkedList.
الدالة مع تعريفها | |
---|---|
1 | public void add(int index, Object obj)
تضيف عنصر جديد في مكان محدد في كائن الـ LinkedList.
|
2 | public boolean add(Object o)
تضيف عنصر جديد في آخر كائن الـ LinkedList. ترجع true إذا تمت الإضافة بنجاح. |
3 | public boolean addAll(Collection c)
تضيف جميع عناصر الكائن c في آخر كائن الـ LinkedList. ترجع true إذا تمت الإضافة بنجاح. ترمي الإستثناء NullPointerException في حال كان الكائن c فارغاً. |
4 | public boolean addAll(int index, Collection c)
تضيف جميع عناصر الكائن c في مكان محدد في كائن الـ LinkedList. ترجع true إذا تمت الإضافة بنجاح.
|
5 | public void addFirst(Object o) تضيف عنصر في أول كائن الـ LinkedList. |
6 | public void addLast(Object o) تضيف عنصر في آخر كائن الـ LinkedList. |
7 | public void clear() تمسح جميع العناصر الموجودة في كائن الـ LinkedList. |
8 | public Object clone() ترجع نسخة من كائن الـ LinkedList. |
9 | public boolean contains(Object o) ترجع true في حال كان كائن الـ LinkedList يملك الكائن الذي نضعه لها كـ Argument. |
10 | public Object get(int index)
ترجع العنصر الموجود على الـ index الذي نمرره لها كـ Argument. ترمي الإستثناء IndexOutOfBoundsException في حال كان الـ index المحدد فيها أصغر من 0 أو أكبر من عدد العناصر الموجودة. |
11 | public Object getFirst()
ترجع أول عنصر موجود في كائن الـ LinkedList. ترمي الإستثناء NoSuchElementException في حال كان كائن الـ LinkedList فارغاً. |
12 | public Object getLast()
ترجع آخر عنصر موجود في كائن الـ LinkedList. ترمي الإستثناء NoSuchElementException في حال كان كائن الـ LinkedList فارغاً. |
13 | public int indexOf(Object o)
تبحث في كائن الـ LinkedList عن أي قيمة نمررها لها كـ Argument. ترجع رقم أول Index يحتوي على القيمة المطلوبة في حال وجود نفس القيمة في أكثر من عنصر. ترجع 1- في حال عدم إيجاد القيمة المطلوبة. |
14 | public int lastIndexOf(Object o)
تبحث في كائن الـ LinkedList عن أي قيمة نمررها لها كـ Argument. ترجع رقم آخر Index يحتوي على القيمة المطلوبة في حال وجود نفس القيمة في أكثر من عنصر. ترجع 1- في حال عدم إيجاد القيمة المطلوبة. |
15 | publicIteratorIterator(int index) ترجع كائن نوعه ListIterator يحتوي على جميع عناصر كائن الـ LinkedList. |
16 | public Object remove()
تحذف أول عنصر موجود في كائن الـ LinkedList و ترجعه. ترمي الإستثناء NoSuchElementException في حال كان كائن الـ LinkedList فارغأً. |
17 | public Object remove(int index)
تحذف عنصر محدد من كائن الـ LinkedList و ترجعه. ترمي الإستثناء IndexOutOfBoundsException في حال كان الـ index المحدد فيها أصغر من 0 أو أكبر من عدد العناصر الموجودة. |
18 | public boolean remove(Object o)
تحذف عنصر محدد من كائن الـ LinkedList و ترجعه. ترجع true إذا تم حذف الكائن بنجاح, غير ذلك ترجع false. |
19 | public Object removeFirst()
تحذف أول عنصر موجود كائن الـ LinkedList و ترجعه. ترمي الإستثناء NoSuchElementException في حال كان كائن الـ LinkedList فارغأً. |
20 | public Object removeLast()
تحذف آخر عنصر موجود كائن الـ LinkedList و ترجعه. ترمي الإستثناء NoSuchElementException في حال كان كائن الـ LinkedList فارغأً. |
21 | public Object set(int index, Object element)
تبدل عنصر محدد في كائن الـ LinkedList بعنصر جديد, و ترجعه أيضاً. ترمي الإستثناء IndexOutOfBoundsException في حال كان الـ index المحدد فيها أصغر من 0 أو أكبر من عدد العناصر الموجودة. |
22 | public int size() ترجع عدد العناصر الموجودة في كائن الـ LinkedList. |
23 | public Object[] toArray() ترجع مصفوفة نوعها Object تحتوي على جميع العناصر الموجودة في كائن الـ LinkedList. |
24 | public Object[] toArray(Object[] array)
ترجع مصفوفة نوعها Object تحتوي على جميع العناصر الموجودة في كائن الـ LinkedList في حال كانوا من نفس نوع المصفوفة array التي نمررها لها كـ Argument. إذاً المصفوفة array تجعل مترجم جافا يحدد نوع المصفوفة المراد إرجاعها, أي يستخدمها المترجم لفحص نوع عناصر كائن الـ LinkedList. في حال وجد نوع المصفوفة array مطابق لنوع العناصر الموجودة في كائن الـ LinkedList سيقوم بإرجاع هذه العناصر في مصفوفة جديدة و لن يظهر أي خطأ. في حال وجد نوع المصفوفة array يختلف عن نوع العناصر الموجودة في كائن الـ LinkedList سيظهر لك الخطأ RuntimeException قبل التشغيل. |
أمثلة شاملة
في كل مثال موضوع استخدامنا كونستركتور مختلف و دوال جديدة.
المثال الأول
في المثال التالي قمنا بتعريف كائن نوعه LinkedList أدخلنا فيه 6 عناصر ثم حذفنا منه عنصرين.
استخدامنا الدوال التالية: add() - addFirst() - addLast() - remove() - size().
سنحصل على النتيجة التالية عند التشغيل.
المثال الثاني
في المثال التالي قمنا بإضافة كائن نوعه LinkedListفي كائن آخر نوعه LinkedList.
لاحظ هنا أنه عند إضافة كائن بواسطة الدالة add(Collection c) فإن جميع عناصره توضع في عنصر واحد.
سنحصل على النتيجة التالية عند التشغيل.
المثال الثالث
في المثال التالي قمنا بتمرير كائن نوعه LinkedListفي كونستركتور كائن آخر نوعه LinkedList.
لاحظ هنا أن جميع عناصر الكائن الأول ستوضع بنفس الترتيب في الكائن الثاني, و سيوضع كل كائن في عنصر أيضاً.
سنحصل على النتيجة التالية عند التشغيل.
المثال الرابع
في المثال التالي قمنا باستخدام الدوال التي تستخدم في البحث و التشييك.
استخدامنا الدوال التالية: add() - get() - getFirst() - getLast() - size() - indexOf() - lastIndexOf() - contains().
سنحصل على النتيجة التالية عند التشغيل.
المثال الخامس
في المثال التالي قمنا بنسخ عناصر كائن الـ LinkedList بداخل مصفوفة جديدة نوعها Object بواسطة الدالة toArray().
سنحصل على النتيجة التالية عند التشغيل.
المثال السادس
في المثال التالي قمنا بإنشاء نسخة ثانية من كائن الـ LinkedList في كائن جديد نوعه Object بواسطة الدالة clone(), بعدها قمنا بمسح كائن الـ LinkedList الأصلي.
إنتبه: النسخة التي أنشأناها هنا تعتبر مجرد صورة للأشياء الموجودة في كائن الـ LinkedList.
سنحصل على النتيجة التالية عند التشغيل.
المثال السابع
في المثال التالي قمنا بتحديد نوع الكائنات التي يمكن إدخالها في كائنات الـ LinkedList من خلال تطبيق مبدأ الـ Generics.
ملاحظة: سنشرح الـ Generics في درس خاص و هذا مجرد مثال بسيط.
سنحصل على النتيجة التالية عند التشغيل.