CodeGym /مدونة جافا /Random-AR /قائمة جافا
John Squirrels
مستوى
San Francisco

قائمة جافا

نشرت في المجموعة
يحتوي Java Collection Framework على واجهات وفئات مفيدة جدًا تنفذها للعمل مع هياكل البيانات. يمكن القول أن هذا أحد أهم أطر عمل JDK. تحظى واجهة القائمة بشعبية كبيرة. لأنه بدون كل أنواع القوائم في البرمجة لا غنى عنه. في هذه المقالة، سنغطي هذه الواجهة وأساليب قائمة Java وتطبيقاتها.

واجهة قائمة جافا

أهم شيء في القائمة هو أنها مجموعة مرتبة . يمكنك أيضًا تسميتها بالتسلسل. في Java، تكون القوائم متجانسة، أي أن عناصر القائمة من نفس نوع البيانات. ترث واجهة Java List من Collection، وترث جميع عملياتها. بالإضافة إلى هذه العمليات، تكون العمليات التالية ممكنة أيضًا في القائمة:
  • الوصول الموضعي. يحتوي كل عنصر على فهرس ويمكن معالجته بناءً على موضعه. في القائمة. أي أنه يمكنك إضافة العناصر واستبعادها وتعديلها.
  • يبحث. يمكنك العثور على عنصر في القائمة حسب محتواه وإرجاع فهرسه.
  • تكرار. تسمح الطبيعة التسلسلية للقائمة باستخدام طرق التكرار (listIterator).
  • عرض النطاق. تقوم طريقة القائمة الفرعية بتنفيذ عمليات نطاق عشوائية في القائمة.

طرق قائمة جافا

يتم عرض العمليات المذكورة أعلاه في طرق واجهة قائمة Java. وهنا بعض منهم:
طريقة وصف
إضافة (العنصر E) تضيف هذه الطريقة عنصر العنصر إلى نهاية هذه القائمة.
إضافة (مؤشر كثافة العمليات، عنصر) تضيف الطريقة عنصرًا في فهرس معين في القائمة. إذا تم تمرير المعلمة المطلوبة، فإنه يضيف العنصر في نهاية القائمة.
addAll(مؤشر int، مجموعة المجموعة) يضيف كافة العناصر الموجودة في المجموعة المحددة إلى القائمة. إذا تم تمرير معلمة واحدة، فإنها تضيف كافة عناصر المجموعة المحددة في نهاية القائمة.
مقاس() إرجاع حجم القائمة (كمية العناصر في القائمة).
الحصول على (مؤشر كثافة العمليات) إرجاع العنصر في الفهرس المحدد.
مجموعة (مؤشر كثافة العمليات، عنصر) يستبدل العناصر الموجودة في فهرس معين بالعنصر الجديد ويعيد العنصر الذي تم استبداله بعنصر جديد.
إزالة (مؤشر كثافة العمليات) إزالة عنصر من الفهرس المحدد.
إزالة (عنصر) إزالة التواجد الأول للعنصر المحدد في القائمة.
واضح() يزيل كافة العناصر من القائمة.
فهرس (عنصر) إرجاع التواجد الأول للعنصر المحدد. إذا لم يكن العنصر موجودًا في القائمة، فسيتم إرجاع -1 .
آخر فهرس (عنصر) إرجاع التواجد الأخير للعنصر المحدد. إذا لم يكن العنصر موجودًا في القائمة، فسيتم إرجاع -1 .
يساوي (عنصر) قارن مساواة العنصر المعطى مع عناصر القائمة.
رمز التجزئة () قم بإرجاع قيمة رمز التجزئة للقائمة المحددة.
فارغ() يتحقق مما إذا كانت القائمة فارغة. يُرجع صحيحًا إذا كانت القائمة فارغة.
يحتوي على (عنصر) يتحقق مما إذا كانت القائمة تحتوي على العنصر . يُرجع صحيحًا إذا كانت القائمة تحتوي على العنصر.
يحتوي على الكل (مجموعة المجموعة) التحقق مما إذا كانت القائمة تحتوي على مجموعة العناصر بأكملها.
فرز (شركات المقارنة) فرز عناصر القائمة على أساس المقارنة المحددة.
القائمة الفرعية (int fromIndex، int toIndex) إرجاع عرض لجزء من هذه القائمة بين fromIndex المحدد، شاملاً، وtoIndex، حصريًا.

تنفيذ القائمة

نظرًا لأن القائمة عبارة عن واجهة، تحتاج البرامج إلى إنشاء تطبيق ملموس لها. يمكنك الاختيار بين تطبيقات القائمة التالية في Java Collections API:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
التطبيق الأكثر شيوعًا لواجهة القائمة يسمى ArrayList. في كثير من الأحيان أقل بكثير، ولكن لا يزال بإمكانك رؤية استخدام LinkedList في المهام الحقيقية، ولكن Vector و Stack أصبحا عفا عليهما الزمن من الناحية الأخلاقية، لذلك من المرجح أن تجدهما فقط في المشاريع ذات التعليمات البرمجية القديمة القديمة.

إعلان واجهة القائمة

يمكنك إعلان قائمة في برنامج Java بإحدى الطرق التالية:
List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
من الأفضل الإعلان عن قائمة جديدة عبر الواجهة. وبالمثل، يمكنك الإعلان عن تطبيقات أخرى للقائمة. أقصر الطرق:
Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
مع مثل هذا الإعلان، يتم تحديد نوع بيانات عناصر هذه القوائم أثناء تهيئة القائمة، أي عند إضافة العناصر هناك.
List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
الآن يمكن إضافة سلاسل فقط إلى مجموعتنا، والأعداد الصحيحة إلى LinkedList ، والأعداد العائمة إلى myVector ، و myList هي قائمة من الأحرف.

كيف تعمل قائمة ArrayList

إذا كنت على دراية بالمصفوفات العادية بالفعل، فأنت أيضًا على دراية إلى حد ما بـ ArrayList. في الواقع، ArrayList عبارة عن مصفوفة ديناميكية، وبداخلها مصفوفة عادية. تعمل هذه المصفوفة كمخزن للبيانات. يقوم ArrayList بتخزين أنواع المراجع فقط، وأي كائنات، بما في ذلك فئات الطرف الثالث، والسلاسل، وتدفقات الإخراج، والمجموعات الأخرى. تُستخدم فئات الغلاف لتخزين أنواع البيانات البدائية في ArrayList. عند إنشاء قائمة، يمكننا تحديد حجمها على الفور، ولكن في معظم الحالات لا نفعل ذلك. بشكل افتراضي، حجم ArrayList = 10. كيف تبدو إضافة عنصر جديد إلى ArrayList؟ أولاً، يتم بدء التحقق لمعرفة ما إذا كانت هناك مساحة كافية في المصفوفة الداخلية وما إذا كان هناك عنصر آخر مناسب أم لا. إذا كان هناك مسافة، يتم إضافة العنصر الجديد إلى نهاية القائمة، أي إلى الخلية التي تلي العنصر الأخير. سيكون فهرسه هو arraylist.size(). إذا أنشأنا قائمتنا للتو وهي فارغة، فهذا يعني أن arrayList.size() = 0. وبناءً على ذلك، سيتم إضافة عنصر جديد إلى الخلية ذات الفهرس 0. إذا تبين أنه لا توجد مساحة كافية، فسيتم إضافة عنصر جديد يتم إنشاء المصفوفة داخل ArrayList بالحجم (حجم OldArray * 1.5) + 1. وبنفس المبدأ، يحدث الإدراج في منتصف القائمة، ولكن في نفس الوقت، جميع العناصر التي تتبع العنصر المدرج هي تحولت إلى اليمين. لذا، إذا كان لدينا 5 عناصر في المصفوفة، ونحتاج إلى إدراج عنصر في الخلية رقم 2 (أي العنصر الثالث)، فسيظل عنصرا المصفوفة 0 و1 في مكانهما، وسيظهر عنصر جديد في الخلية 2، و وينتقل سلفه إلى الخلية الثالثة وهكذا.

مثال لقائمة Java (تحقيق قائمة الصفيف)

import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
هنا هو إخراج هذا البرنامج:
حجم قائمتي قبل init = 0 [Alex, Tanya, Veloxy, Alex, Andrew] حجم قائمتي بعد init = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] حجم قائمتي = 6 0 Andrew بعد إزالة أحد Alex يوجد Alex واحد فقط: [Alex, Tanya, Veloxy, Andrew, Ihor] Tanya حجم المتجه بعد الطريقة الواضحة = 0 انتهت العملية برمز الخروج 0

كيف يعمل LinkedList

في LinkedList، العناصر هي في الواقع روابط في نفس السلسلة. كل عنصر، بالإضافة إلى البيانات التي يخزنها، لديه رابط للعنصر السابق والتالي. تتيح لك هذه الروابط التنقل من عنصر إلى آخر. يدعم المكرر الاجتياز في كلا الاتجاهين. ينفذ طرقًا للحصول على القائمة وإزالتها وإدراجها في بداية القائمة ووسطها ونهايتها. يسمح لك بإضافة أي عناصر بما في ذلك فارغة. يطبق LinkedList واجهتين - ليس فقط القائمة، ولكن أيضًا Deque. يوفر هذا القدرة على إنشاء قائمة انتظار ثنائية الاتجاه من أي عنصر، حتى لو كان خاليًا. كل كائن يتم وضعه في القائمة المرتبطة هو عقدة (عقدة). تحتوي كل عقدة على عنصر، رابط للعقدة السابقة والتالية. في الواقع، تتكون القائمة المرتبطة من سلسلة من العقد، كل منها مصممة لتخزين كائن من النوع المحدد عند إنشائه.

مثال الكود

import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3

           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
الإخراج هنا:
ثلاثة عناصر مضافة: [1، 2، 4] [1، 4، 5] [1، 4، 7، 5]

مثال على رمز المتجهات

يعد Vector أيضًا بمثابة تحقيق مصفوفة ديناميكية وهو مشابه جدًا لـ ArrayList، ولكنه متزامن ويحتوي على بعض الأساليب القديمة التي لا يحتوي عليها إطار عمل المجموعة. فيما يلي مثال بسيط لاستخدام هذا الفصل.
import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
الإخراج هو:
حجم المتجه الفارغ = 0 [أليكس، تانيا، أندرو] [أليكس، تانيا، أندرو، أليكس، إيهور] حجم المتجه = 5 العنصر الأول للمتجه = أليكس 2 3 [أليكس، تانيا، أندرو، Alex, Ihor] حجم المتجه بعد الطريقة الواضحة = 0 انتهت العملية برمز الخروج 0

مثال على رمز فئة Java Stack

import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
لا يحتوي Stack على طرق الإضافة () والإزالة () فحسب ، بل يحتوي أيضًا على طرق الدفع والبوب، وهي تعتبر كلاسيكية لبنية البيانات هذه. تلتزم المكدس بقاعدة "أولاً ما يدخل، يخرج أخيرًا" - وهذا مضاد للطابور. ولذلك، فإن عملية البوب ​​تنبثق العنصر الذي تم وضعه آخر مرة على المكدس. هنا هو الناتج من مثالنا:
صحيح كاذب [بول، جوني، أليكس، أندرو] [بول، جوني، أليكس]
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION