recent
أخبار ساخنة

القوائم Lists في لغة جافا JAVA الدرس|20|

الصفحة الرئيسية


القوائم LISTS

هي عبارة عن اداة لتخزين البيانات مثل المصفوفة تماماً, نحن نستخدم المصفوفة لتخزين البيانات و كذلك اللست يستخدم لتخزين البيانات.

 

ماهو الفرق بين الليست و المصفوفة؟

الليست اكثر فاعلية و ديناميكية و اكثر كفاءة لأن عن طريقه نستطيع البحث داخل البيانات بكل سهولة"بحث, إضافة, حفظ" و إسترجاع و قراءة البيانات بكل سهولة.

 

أنواع الليست LISTS

يوجد نوعين من الليست و هما نوع إسمه LinkedList و هو الأكثر فاعلية و الثاني ArrayList.


نوع ArrayList

سنتناول في هذه الفقرة ArrayList و Array تعني مصفوفة ستوفر علينا تعريفها و تعيين حجمها يعني عندما نعرف مصفوفة نوع ArrayList لا نحتاج لتعريف حجمها لأن الحجم سيكبر تلقائياً مع إضافة العناصر, و يقوم بتخزين البيانات في الذاكرة بشكل منتظم.

الشكل العام لها

List<String> s=new ArrayList<String>();

لبناء الليست نكتب الكلمة المحجوزة List ثم نتبعها بنوع البيانات التي سيتم تخزينها في الليست مثلاً String ثم نقوم بكتابة كائن على سبيل المثال n ثم = new ثم إسم اللستة ثم نوع البيانات مرة أخرى.

package forech;
import java.util.ArrayList;
import java.util.List;
public class Forech {

    public static void main(String[] args) {
        List<String> s=new ArrayList<String>();
        s.add("Saja");
        s.add("Ahmed");
        s.add("Ahsan");
        System.out.println(s);
        
    }

}

 


شرح المثال السابق 1

في البداية قمنا بتضمين حزمة الإدخال للمصفوفة ArrayList و ايضاً حزمة الإدخال لليست List بعد ذلك دخلنا للبرنامج الرئيسي و أنشأنا ليست نوعه نصي String و كائن الإدخال هو s و كتبنا إسم لليست و أضفنا لها ثلاث عناصر عبر الدالة add و العناصر هي "Saja, Ahmed, Ahsan" ثم طلبنا من البرنامج عرض البيانات كاملة على الشاشة عبر دالة الطباعة println.


نوع LinkedList

هذ النوع يقوم بتخزين البيانات في الذاكرة بشكل عشوائي على شكل عقد و كل عقدة لها عنوان مما يسهل علينا البحث و التعديل و الإضافة, و هو النوع الشائع و المستخدم أكثر.

package forech;
import java.util.LinkedList;
import java.util.List;
public class Forech {

    public static void main(String[] args) {
        List<String> s=new LinkedList<String>();
        s.add("parrot");
        s.add("wazer");
        s.add("data");
        System.out.println(s);
        
    }

}

 


شرح المثال السابق 2

في البداية قمنا بتضمين حزمة الإدخال للمصفوفة LinkedList و ايضاً حزمة الإدخال لليست List بعد ذلك دخلنا للبرنامج الرئيسي و أنشأنا ليست نوعه نصي ثم قمنا بإضافة لها ثلاث عناصر و هي "parrot, wazer, data " قم قمنا بطباعة المصفوفة بشكل كامل على الشاشة.


إضافة قيم عددية متنوعة في List من نوع LinkedList

في هذه الفقرة سوف نتعرف على كيفية تعريف ليست من نوع Number و Number هو شامل Integer و Double و Float و كل ما يتعلق بالاعداد.

الشكل العام لها

List<Number> s=new LinkedList<Number>();

لإضافة قيمة عددية من نوع Float او Long او Double إلى الليست نستخدم الكائن.

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(4));
        s.add(new Float(9.4));
        s.add(new Double(236.269));
        s.add(new Long(82687985));
        System.out.println(s);
        
    }

}


شرح المثال السابق 3

دخلنا للبرنامج الرئيسي و قمنا بإنشاء ليست نوعها أرقام Number و إسمها LinkedLists ثم قمنا عن طريق الكائن s بإضافة اربع عناصر رقمية من انواع مختلفة (Int, Float, Double, Long) ثم قمنا بطباعة جميع عناصر الكائن على الشاشة.


إستخدام foreach مع الليست

اذا اردنا أن نطبع كل كل عقدة على حدى يجب أن نستخدم خاصية foreach و في لغة الجافا تكتب for عادية.

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(4));
        s.add(new Float(9.4));
        s.add(new Double(236.269));
        s.add(new Long(82687985));
        s.set(2, new Double(561.235));
        for(Number i:s)
        System.out.println(i);
        
    }

}


 

شرح المثال السابق 4

دخلنا للبرنامج الرئيسي و قمنا بإنشاء ليست نوعها أرقام Number و إسمها LinkedLists ثم قمنا بإضافة ارقام من انواع بيانات مختلفة عبر الكائن s ثم دخلنا في حلقة foreach و قلنا له i:s يعني خزن لنا كافة قيم s في i ثم طباعة i كل عقدة على حدى و i سيبقى يشير إلى قيم s قيمة قيمة و سيطبع النتائج على الشاشة كل قيمة في سطر لوحدها.

 

إضافة قيمة جديدة في List وتحديد موقعها

في هذه الفقرة سوف نتعلم على كيفية اضافة قيمة إلى الليست و كذلك تحديد موقعها في الليست و كيفية إسترجاع قيمة من الليست, يجب ان نعرف بأن العقدة الأولى عنوانها 0 و العقدة الثانية 1 و الثالثة 2 ...الخ, نستخدم الدالة add للإضافة.

1-إضافة قيمة جديدة بموقع معين في الليست

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(3));
        s.add(new Float(5.4));
        s.add(new Double(2036.269));
        s.add(new Long(155562));
        s.add(2,new Integer(10));
        System.out.println(s);
        
    }

}

 


شرح البرنامج السابق 5

قمنا بإنشاء ليست من نوع ارقام و قمنا بإضافة لها اربع قيم عددية لأنواع مختلفة ثم قمنا بشكل إجباري بإضافة قيمة عددية بالعقدة رقم 2 نوعها Integer و قيمتها 10 و عند التشغيل سيقوم البرنامج بإضافتها مكان العقدة 2 و إزاحة الباقي للأمام.

2-طباعة قيمة واحدة من الليست

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(3));
        s.add(new Float(5.4));
        s.add(new Double(2036.269));
        s.add(new Long(155562));
        s.add(2,new Integer(10));
        Number N=s.get(1);
        System.out.println(N);
        
    }

}


شرح التطبيق السابق 6

قمنا بإنشاء ليست من نوع ارقام و قمنا بإضافة لها اربع قيم عددية لأنواع مختلفة ثم قمنا بشكل إجباري بإضافة قيمة عددية بالعقدة رقم 2 نوعها Integer و قيمتها 10 و عند التشغيل سيقوم البرنامج بإضافتها مكان العقدة 2 و إزاحة الباقي للأمام ثم انشأنا متغير بنفس نوع البيانات N و حددنا له بأن يطبع لنا فقط العقدة رقم 1 عن طريق الكائن و الدالة get و وضعنا أمر الطباعة بأن يطبع لنا N.


تعديل او حذف عقدة في الليست

في حال اردنا التعديل على قيمة ما في الليست او حذف عقدة ما, يمكن أن نستخدم الكائن الخاص بالليست ثم الدالة set وفي حال التعديل يطلب مننا تمركز العقدة و القيمة الجديدة, و لحذف قيمة من عقدة نستخدم الدالة remove.

1-تعديل عقدة set

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(3));
        s.add(new Float(5.4));
        s.add(new Double(2036.269));
        s.add(new Long(155562));
        s.set(2, new Double(2665.62));
        System.out.println(s);
        
    }

}


شرح المثال السابق 7

في هذا المثال قمنا بتعديل العقدة رقم 2 و أضفنا لها قيمة جديدة و هي 2665.62 هذا الرقم سوف يحل مكان العقدة رقم 2 عند الطباعة.

2-حذف عقدة remove

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {

    public static void main(String[] args) {
        List<Number> s=new LinkedList<Number>();
        s.add(new Integer(3));
        s.add(new Float(5.4));
        s.add(new Double(2036.269));
        s.add(new Long(155562));
        s.set(2, new Double(2665.62));
        s.remove(1);
        System.out.println(s);
        
    }

}

 

شرح المثال السابق 8

في هذا المثال إستخدمنا الدالة remove للحذف و عن طريق الكائن s استخدمنا الدالة remove من اجل حذف قيم العقدة رقم 1و عند التشغيل سيقوم بحذف العقدة رقم 1 و يطبع باقي العقد.


البحث عن قيمة داخل الليست

في بعض الاحيان نريد البحث عن قيمة او اسم بداخل اللست للوصول المباشر لها في حال كانت بيانات ضخمة, يتم هذا عن طريق الدالة contains.

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {
    public static void main(String[] args) {
        List<String> s=new LinkedList<String>();
        s.add("Parrot");
        s.add("Kaissar");
        s.add("Bashar");
        s.add("S49");
        if(s.contains("Bashar"))
            System.out.println("موجود");
        else
            System.out.println("غير موجود");
        
    }

}


شرح المثال السابق 9

في هذا المثال قمنا بالدخول في حلقة if عبر الدالة contains و قلنا له في حال كان الإسم Bashar موجود في الليست إطبع لنا أنه موجود, و في حال لم تجده إطبع لنا بأنه غير موجود.

ترتيب قائمة اسماء في الليست

لترتيب اسماء داخل قوائم الليست مثلاً حسب الأبجدية نقوم بعمل هذا بسهولة عبر Collections.sort للترتيب الأبجدي و للترتيب العكسي نستخدم Collections.reverce.

1-ترتيب ابجدي Collections.sort

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {
    public static void main(String[] args) {
        List<String> s=new LinkedList<String>();
        s.add("Parrot");
        s.add("Kaissar");
        s.add("Bashar");
        s.add("S49");
    Collections.sort(s);
        System.out.println(s);
        
    }

}


شرح المثال السابق 10

لقد أنشأنا مصفوفة نصية تحتوي على أربع عناصر و عن طريق إستخدام الدالة Collections.sort و حددنا الكائن له من أجل ترتيب هذه العناصر بترتيب أبجدي عند تشغيل البرنامج.


2-ترتيب عكسي Collections.reverce

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {
    public static void main(String[] args) {
        List<String> s=new LinkedList<String>();
        s.add("Parrot");
        s.add("Kaissar");
        s.add("Bashar");
        s.add("S49");
    Collections.sort(s);
        System.out.println(s);
    Collections.reverce(s);
        System.out.println(s);
        
    }

}

 

شرح المثال السابق 11

لقد أنشأنا مصفوفة نصية تحتوي على أربع عناصر و عن طريق إستخدام الدالة Collections.reverce و حددنا الكائن له سوف يقوم بترتيب عناصر الليست بشكل عكسي بعكس المثال السابق.


نسخ قائمة من قائمة اخرى

لنتعلم هنا كيفية نسخ ليسته الى ليسته اخرى و سنستخدم في هذا الدالة Collections.copy.

package forech;
import java.util.LinkedList;
import java.util.List;

public class Forech {
    public static void main(String[] args) {
        List<String> C=new LinkedList<String>();
        C.add("Parrot");
        C.add("Kaissar");
        C.add("Bashar");
        C.add("S49");
         List<String> S=new LinkedList<String>();
          S.add("Parrot");
          S.add("Kaissar");
          S.add("Bashar");
          S.add("S49");
          Collections.copy(S, C)
              System.out.println(S);
        
    }

}


شرح المثال السابق 12

لقد قمنا هنا بإنشاء ليستتين الأولى الكائن الخاص بها C و الثانية الكائن الخاص بها هو S و بكل واحدة بيانات مختلفة عن الأخرى ثم إستخدمنا الدالة Collections.copy من أجل نسخ عناصر المصفوفة الذي كائنها C في المصفوفة الذي كائنها S و عند التشغيل سيتم محو محتويات C ووضعها في S ثم قمنا بطباعة محتويات S لنجد بها محتويات الكائن C.

google-playkhamsatmostaqltradent