اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الإثنان يتم إستخدامهما بنفس الطريقة لأن كﻻهما يقوم بعمل implement لنفس الواجهة البرمجية list

ولكن يوجد فرق في طريقة عمل كل منهما:

  1. الarrayList تقوم بإستخدام الarray من أجل تخزين العناصر, بينما الLinkedList تقوم بإستخدام نوع من هياكل البيانات الذي يدعى doublyLinkedList والذي يعتمد بشكل أساسي على أن لكل عنصر ثﻻث خواص وهما القيمة, العنصر التالي, والعنصر السابق , على عكس المصفوفة التي تقوم بتخزين كل عنصر وتصل إليه بإستخدام الفهرسindex فﻻ يوجد عﻻقة بين العناصر وبعضها
  2. يوجد فرق في الأداء بينهما عند القيام على عمليات الإضافة والحذف على العناصر, حيث الlinkedList كما ذكرنا سابقاً تعتمد على ان لكل عنصر خواص القيمة والتالي والسابق, فإذا أردنا جدﻻ إضافة عنصر يمكن ذلك بكل سهولة عن طريق الإشارة إليه كما موضح من الشكل
    element a{
    value:"sharaf",
    next: b
    }
    
    element b{
    value"ashraf"
    next : null
    }
     إذا اردنا إضافة عنصر يمكن ذلك بسهولة عن طريق تعديل قيمة الخاصية next
    في العنصر b

    بينما في الarrayLit بسبب أنها تعتمد على المصفوفة في تخزين البيانات فيجب أن تقوم بحذف المصفوفة كلها وبنائها من جديد حتى تستطيع إضافة عنصر أو حذف عنصر

  3. الlinkedList يتصرف كlistلانه يقوم بعمل implement للlist interface بالإضافة لقيامه بعمل الdeque لأنه يقوم بعمل implement لواجهته , على عكس الarrayList التي تتصرف فقط ك list

  4. بوجه عام أداء الarrayList يتفوق في حالة إعتماد التطبيق على تخزين البيانات والوصول إليها بينما الLinkedList تتفوق في حالة إعتماد التطبيق على إضافة ومسح العناصر بشكل متردد

  • 0
نشر

يعد كل من ArrayList و LinkedList تطبيق لواجهة list في Java. فيما يلي الاختلافات المهمة بين طريقة ArrayList و LinkedList:

من حيث التنفيذ الداخلي: يستخدم ArrayList داخليا مصفوفة ديناميكية لتخزين عناصرها بينما تستخدم LinkedList ما يعرف ب Doubly Linked List لتخزين عناصرها.

ArrayList بطيئة لأن المعالجة تكون أبطأ بينما LinkedList أسرع لأنه لا يتطلب الكثير من عمليات التحويل أو التي تسمى shifting .

ArrayList تنفذ القائمة فقط بينما تطبق LinkedList القائمة بالإضافة إلى قائمة الانتظار حيث يمكن أن يعمل كقائمة انتظار أيضًا (queue)

ArrayList أسرع في تخزين البيانات والوصول إليها بينما LinkedList أسرع في معالجة البيانات.

مثال على ArrayList

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class JavaTester {
   public static void main(String args[]) {
	//انشاء ArrayList
      List<String> list = new ArrayList<>();
        //اضافة البيانات الى القائمة
      list.add("A");
      list.add("B");
      list.add("C");
      list.add("D");
        //طباعة القائمة
      System.out.println(list);

   }
}

الناتج كالتالي

[A, B, C, D]

مثال على LinkedList

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class JavaTester {
   public static void main(String args[]) {
	//انشاء LinkedList
      List<String> list1 = new LinkedList<>();
        //اضافة البيانات للقائمة
      list1.add("A");
      list1.add("B");
      list1.add("C");
      list1.add("D");
		//طباعة بيانات القائمة
      System.out.println(list1);
   }
}

الناتج كالتالي

[A, B, C, D]

 

  • 0
نشر

linkedlist هي أحد الفرسان الأربعة في المسابقات البرمجية عندما نتحدث عن الجافا لما تقدمه من ديناميكية ومرونة في التعامل على عكس المصفوفات العادية فهما يوفران لك العديد من الدوال التي تمكنك من البحث والتشييك على عناصرها وإضافة ومعالجة وحذف عناصر جديدة إلخ... تابع معي: linkedlist  هو كلاس يرث الكلاس ArrayList والذي بدوره يحقق الواجهة List والتي بدورها تحقق الواجهة الكبيرة Collection.
الواجهة List تم بناءه لتعريف وتخزين مجموعة من العناصر كما لو أنه مصفوفة ليس لها حجم محدد. و العناصر يمكن إضافتها في أمكان محددة ضمنها, و يمكن الوصول إليها بواسطة الفهارس. وهذا مايعطيك حرية ومرونة كبيرة.ويملك العديد من الدوال مثل add و addAll و remove و إضافةً إلى الدوال التي ورثها من Collection أما ArrayList فهي تحقيق للواجهة List  أي أنها تعريف للدوال الموجودة فيها إضافةً إلى دوال جديدة لمنحك حرية أكبر في التعامل مع المصفوفات. أمثلة:

// لاستخدامه عليك استيراده
import java.util.ArrayList;  
public class Main {
    public static void main(String[] args) {
		//ArrayList إنشاء
        ArrayList li = new ArrayList();
        // طباعة عناصرها
        System.out.println(li);
		// عدد عناصرها
        System.out.println(li.size());
		// إضافة عناصر
        li.add("1");
        li.add("ali");
        // طباعة عناصرها
        System.out.println(li);
		// عدد عناصرها
        System.out.println(li.size());
		// حذف عنصر
        li.remove("ali"); 
    }
}

بواني الكلاس:

ArrayList() // الباني الافتراضي وهنا يكون حجمه الابتدائي هو عنصر واحد فقط
ArrayList(int initialCapacity)  // لتحديد حجمه المبدأي
ArrayList(Collection c) //أخرى ArrayList يستخدم لكي نمرر له 

الآن LinkedList ترث ال arraylist كما ذكرنا، أضف إلى هذا أنها مطورة أكثر من ناحية الأداء والكفاءة والدوال. فمثلاً تمتلك دوال للإضافة والحذف والمعالجة غير موجودة في arraylist أيضاً مترجم جافا يتعامل معها بسهولة وسرعة أكبر من arraylist  لكن LinkedList  تشغل مساحة أكبر من الذاكرة مقاؤنةً ب LinkedList مثال:

import java.util.LinkedList;
public class Main {
    public static void main(String[] args) {
        LinkedList li = new LinkedList();
        System.out.println(li);
        System.out.println(li.size());
        li.add("ali");         // [ali] 
		// للإضافة ضمن موقع محدد
        li.add(0, "eyad");      // [eyad, ali]     
        li.addFirst("ali");    // [ali, eyad, ali] 
        li.addLast("eyad");  // [ali, eyad, aliوeyad] 
 		// لحذف أول عنصر
        arr.remove(); 
		// العنصر الثاني
        li.remove(1);       
    }
 
}

البواني:

LinkedList() // الافتراضي
LinkedList(Collection c) //Arraylist أو LinkedList لتمرير 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...