الفرق بين ArrayList و LinkedList في Java
يقوم كل من ArrayList و LinkedList بتنفيذ واجهة القائمة ، ولكن ما الفرق بعد ذلك؟ يكمن الاختلاف الرئيسي بين ArrayList و LinkedList في ArrayList الذي يتم تنفيذه باستخدام صفيف قابل للتوسيع. مع إضافة المزيد من العناصر إلى ArrayList ، يزداد حجمها ديناميكيا. يمكن الوصول إلى عناصره مباشرة باستخدام طرق get() و set() ، نظرا لأن ArrayList هو في الأساس صفيف.
LinkedList يتم تنفيذه كقائمة مرتبطة ، وأداء الإضافة والإزالة أفضل من أداء ArrayList ، لكنها سيئة لأساليب get() و set() .
div>
في هذه المقالة ، سنلقي نظرة على بعض الاختلافات بين LinkedList و ArrayList ونحاول فهم متى وأين تستخدم LinkedList بدلا من ArrayList.
ArrayList مقابل LinkedList
جميع الاختلافات بين LinkedList و ArrayList لها مصدر وهو الفرق بين المصفوفة و LinkedList (قائمة مرتبطة).
1) منذ يعتمد البحث في ArrayList على فهرس العنصر لذا فهو سريع جدا. طريقة الحصول على (فهرس) < / سبان> لديه تعقيد O (1) ، لكن الإزالة باهظة الثمن لأنه يتعين عليك تعويض جميع العناصر. في حالة LinkedList ، ليس لديه وصول مباشر إلى العناصر ، يجب عليك تصفح القائمة بأكملها لاسترداد عنصر ، وتعقيده يساوي O (n).
2) عمليات الإدراج سهلة في LinkedList مقارنة ب ArrayList لأنه لا يوجد خطر عند تغيير حجم العنصر وإضافته إلى LinkedList وتعقيده يساوي O (1) ، بينما يقوم ArrayList بتحويل جميع العناصر بتعقيد O (n) في أسوأ الحالات.
3) الحذف يشبه الإدراج ، أفضل في LikedList منه في ArrayList.
4) يحتوي LinkedList على ذاكرة أكبر من ArrayList لأنه في ArrayList يرتبط كل فهرس بالكائن الحالي ، ولكن في حالة LinkedList ، ترتبط كل عقدة بعنصر وعنوان العقدة التالية والسابقة.
1) لا يحتاج تطبيقك إلى وصول عشوائي ، لأن هذه العملية تتكون من مراجعة القائمة بأكملها في هذه الحالة.
2) يحتوي تطبيقك على إدخال وإزالة أكثر من الاسترداد. كلتا العمليتين أسرع في LikedList.
Use ArrayList في Java في هذه المواقف عندما تحتاج إلى وصول غير متزامن. ArrayList سريع وسهل الاستخدام.
1) منذ يعتمد البحث في ArrayList على فهرس العنصر لذا فهو سريع جدا. طريقة الحصول على (فهرس) < / سبان> لديه تعقيد O (1) ، لكن الإزالة باهظة الثمن لأنه يتعين عليك تعويض جميع العناصر. في حالة LinkedList ، ليس لديه وصول مباشر إلى العناصر ، يجب عليك تصفح القائمة بأكملها لاسترداد عنصر ، وتعقيده يساوي O (n).
2) عمليات الإدراج سهلة في LinkedList مقارنة ب ArrayList لأنه لا يوجد خطر عند تغيير حجم العنصر وإضافته إلى LinkedList وتعقيده يساوي O (1) ، بينما يقوم ArrayList بتحويل جميع العناصر بتعقيد O (n) في أسوأ الحالات.
3) الحذف يشبه الإدراج ، أفضل في LikedList منه في ArrayList.
4) يحتوي LinkedList على ذاكرة أكبر من ArrayList لأنه في ArrayList يرتبط كل فهرس بالكائن الحالي ، ولكن في حالة LinkedList ، ترتبط كل عقدة بعنصر وعنوان العقدة التالية والسابقة.
متى تستخدم LinkedList و ArraList في Java
من الواضح أن LinkedList ليس شائعا مثل ArrayList ، ولكنه لا يزال خيارا جيدا في بعض الحالات:1) لا يحتاج تطبيقك إلى وصول عشوائي ، لأن هذه العملية تتكون من مراجعة القائمة بأكملها في هذه الحالة.
2) يحتوي تطبيقك على إدخال وإزالة أكثر من الاسترداد. كلتا العمليتين أسرع في LikedList.
Use ArrayList في Java في هذه المواقف عندما تحتاج إلى وصول غير متزامن. ArrayList سريع وسهل الاستخدام.
مثال على ArrayList
ArrayList< سلسلة> al = قائمة صفيف جديدة< سلسلة> ();
al.add("a")؛
al.add("c")؛
al.add("e")؛
al.add("z")؛
al.add("t");
al.add("m")؛
for(String s: e){
System.out.println(e);
}
مثال على LinkedList
LinkedList< عدد صحيح> llist = قائمة لينكد الجديدة< عدد صحيح> ();
llist.add(8);
llist.add(9);
llist.add(5);
llist.add(2);
llist.add(6);
المكرر< عدد صحيح> هو = llist.iterator ();
while(it.hasNext()){
System.out.println(it.next());
}
أداء ArrayList و LinkedList
التعقيد الزمني لكلتا القائمتين: