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

المجموعات في جافا

نشرت في المجموعة

ما هي المجموعة في جافا؟

يتم تمثيل المجموعة في Java كحاوية تجمع جميع العناصر في وحدة واحدة. على سبيل المثال ، مجلد بريد (مجموعة رسائل بريد إلكتروني)، دليل هاتف (ربط الأسماء بأرقام الهواتف).

ما هو الإطار؟

إطار العمل هو الأساس أو التخطيط الأساسي الذي تبدأ العمل عليه باستخدام الفئات والواجهات المختلفة المتوفرة. على سبيل المثال ، يعد Laravel أحد أشهر أطر عمل PHP التي توفر الهيكل الأساسي لتطبيقك.

ما هو إطار عمل المجموعات في جافا؟

يتم تجميع كافة الكائنات في كائن واحد جنبًا إلى جنب مع بنية تمثل وتوفر طرقًا مختلفة لمعالجة المجموعات. لذلك يوفر إطار عمل المجموعات في Java هياكل بيانات مختلفة تم تنفيذها بالفعل لتخزين البيانات والأساليب، لمعالجتها بميزات مثل الفرز والبحث والحذف والإدراج . على سبيل المثال ، تريد تنفيذ نظام لبعض الشركات العشوائية لتحسين الخدمة لعملائها، على أساس من يأتي أولاً يخدم أولاً. يُعرف هذا أيضًا بتطبيق FIFO (الوارد أولاً يخرج أولاً). نحتاج الآن إلى تنفيذ بنية البيانات هذه ثم استخدامها لتحقيق هدفنا. يوفر لنا إطار عمل المجموعات واجهة قائمة انتظار والتي نحتاج فقط إلى استيرادها بدلاً من تنفيذها، ثم استخدامها، وقد انتهينا. التنفيذ : يمكنك استيراد كافة المجموعات باستخدام السطر التالي:
import java.util.*;
إذا كنت تريد استيراد مجموعة معينة، فاستخدم اسم الحزمة الدقيق، مثل:
import java.util.LinkedList;

فوائد إطار عمل المجموعات في جافا

له الفوائد التالية.
  1. تم تنفيذه بالفعل (توفير الوقت).
  2. كفاءة الأداء (السرعة والجودة).
  3. يقلل من الجهد المبذول لتعلم واستخدام واجهات برمجة التطبيقات الجديدة.

ما هو التسلسل الهرمي لإطار عمل المجموعة؟

الآن دعونا نرى التسلسل الهرمي للمجموعات ولكن أولا، نحن بحاجة إلى معرفة المكونات الأساسية لهذا الإطار.
  1. واجهات
  2. الفصول (التنفيذ)
  3. الخوارزميات

التسلسل الهرمي لإطار المجموعة

المجموعات في جافا - 1لتفهمك:
  1. المجموعة، والتعيين، وقائمة الانتظار، والقائمة كلها عبارة عن واجهات. يتم توسيع المجموعة وقائمة الانتظار والقائمة من خلال واجهة المجموعة.
  2. إن PriorityQueue وHashSet وLinkedList وStack كلها فئات أو تطبيق لهذه الواجهات.
  3. ليس من الضروري أن يقوم الفصل بتطبيق واجهة واحدة فقط. يقوم LinkedList أيضًا بتنفيذ واجهة Deque، على سبيل المثال.

أنواع المجموعات

يحتوي إطار عمل مجموعات Java على الكثير من أنواع المجموعات لتقليل جهودنا. فيما يلي قائمة ببعض المجموعات:
  1. فئة قائمة المصفوفات
  2. فئة القائمة المرتبطة
  3. واجهة القائمة
  4. ضبط الواجهة
  5. واجهة قائمة الانتظار
  6. واجهة الخريطة
  7. فئة قائمة الانتظار ذات الأولوية
  8. فئة هاشماب
  9. واجهة قابلة للمقارنة
  10. فئة LinkedHashMap
  11. فئة خريطة الشجرة
  12. HashTable

واجهات التجميع

سنناقش هنا بعض واجهات المجموعة الشائعة ثم بعض الطرق التي تنفذها الفئات.

واجهة المجموعة

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

واجهة قابلة للتكرار

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

واجهة قائمة الانتظار

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

ضبط الواجهة

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

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

القائمة عبارة عن مجموعة مرتبة تسمى أحيانًا تسلسلًا والتي يمكن أن تحتوي على عناصر مكررة فيها. فهو يوفر التحكم للمستخدم لتحديث أو إزالة عنصر معين، وإدراج عنصر في نقطة محددة باستخدام قيمة فهرس العدد الصحيح الخاص به. LinkedList وArrayList هما فئتان تنفيذيتان لواجهة القائمة.

واجهة ديكو

يرمز Deque إلى قائمة الانتظار ذات النهاية المزدوجة مما يعني أنه يمكننا إجراء العمليات على كلا الطرفين. يمكننا إدراج وإزالة العناصر من كلا الطرفين. تعمل واجهة Deque على توسيع واجهة قائمة الانتظار. يقوم كل من ArrayDeque وLinkedList بتنفيذ واجهة Deque. يوفر طرقًا للإدراج والحذف وفحص المثيل من كلا الطرفين.

واجهة الخريطة

تعد واجهة الخريطة أيضًا جزءًا من إطار عمل المجموعات ولكنها لا تعمل على توسيع واجهة المجموعة. يتم استخدامه لتخزين أزواج القيمة الرئيسية. تطبيقاتها الرئيسية هي HashMap وTreeMap وLinkesHashMap والتي تشبه في جوانب معينة HashSet وTreeSet وLinkedHashSet. يحتوي دائمًا على مفاتيح فريدة ولكن يمكن تكرار القيم. يكون ذلك مفيدًا عندما تحتاج إلى إضافة عنصر أو حذفه أو البحث عنه بناءً على مفتاح. فهو يزودنا بالطرق الأساسية مثل الوضع ، والحصول ، والإزالة ، والحجم ، والفراغ ، وما إلى ذلك.

الطرق الشائعة لهذه الواجهات

سنلقي نظرة الآن على بعض الطرق الشائعة المتوفرة لتنفيذ فئات مختلفة في هذا الإطار باستثناء واجهة الخريطة.
طُرق وصف
إضافة منطقية عامة (E e) يستخدم لإدراج عنصر في المجموعة
إزالة منطقية عامة (عنصر الكائن) يستخدم لإزالة عنصر من المجموعة
حجم int العام () إرجاع عدد العناصر في المجموعة
المنطقية العامة تحتوي على (عنصر الكائن) تستخدم للبحث عن عنصر
المنطقية العامة فارغة () يتحقق مما إذا كانت المجموعة فارغة
القيمة المنطقية العامة تساوي (عنصر الكائن) التحقق من المساواة

فئات التجميع

كما نعلم، يحتوي إطار العمل على واجهات مختلفة يتم تنفيذها بواسطة العديد من الفئات داخله. الآن دعونا نلقي نظرة على بعض الفئات شائعة الاستخدام.

قائمة مرتبطة

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

مثال

import java.util.*;

public class LinkedListExample {
    public static void main(String[] args) {
        Queue<String> customerQueue = new LinkedList<String>();
        //Adding customers to the Queue as they arrived
        customerQueue.add("John");
        customerQueue.add("Angelina");
        customerQueue.add("Brooke");
        customerQueue.add("Maxwell");

        System.out.println("Customers in Queue:"+customerQueue);
        //element() => returns head of the queue
        //we will see our first customer and serve him
        System.out.println("Head of the queue i.e first customer: "+customerQueue.element());
        //remove () method =>removes first element(customer) from the queue i.e the customer is served so remove him to see next
        System.out.println("Element removed from the queue: "+customerQueue.remove());
        //poll () => removes and returns the head
        System.out.println("Poll():Returned Head of the queue: "+customerQueue.poll());
        //print the remaining customers in the Queue
        System.out.println("Final Queue:"+customerQueue);
    }
}

انتاج |

العملاء في قائمة الانتظار: [جون، أنجلينا، بروك، ماكسويل] رئيس قائمة الانتظار، أي العميل الأول: تمت إزالة جون إليمنت من قائمة الانتظار: جون بول (): رئيس قائمة الانتظار المعاد: أنجلينا قائمة الانتظار النهائية: [بروك، ماكسويل]

ArrayList

إنه ينفذ ببساطة واجهة القائمة. يحافظ على ترتيب الإدراج ويستخدم مصفوفة ديناميكية لتخزين عناصر أنواع البيانات المختلفة. يمكن تكرار العناصر. كما أنها غير متزامنة ويمكنها تخزين القيم الخالية. الآن دعونا نرى طرقها المختلفة... وهي مفيدة عندما لا نعرف عدد السجلات أو العناصر التي نحتاج إلى إدراجها. لنأخذ مثالاً على مكتبة لا نعرف فيها عدد الكتب التي يتعين علينا الاحتفاظ بها. لذلك عندما يكون لدينا كتاب، نحتاج إلى إدراجه في ArrayList.

مثال

public class ArrayListExample {
	public static void main(String args[]) {

		// Creating the ArrayList
		ArrayList<String> books = new ArrayList<String>();

		// Adding a book to the list
		books.add("Absalom, Absalom!");
		// Adding a book in array list
		books.add("A Time to Kill");
		// Adding a book to the list
		books.add("The House of Mirth");
		// Adding a book to the list
		books.add("East of Eden");
		// Traversing the list through Iterator
		Iterator<String> itr = books.iterator();
		while (itr.hasNext()) {
			System.out.println(itr.next());
		}
	}
}

انتاج |

أبشالوم، أبشالوم! وقت لقتل بيت الفرح شرق عدن

HashSet

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

مثال

import java.util.*;
class HashSetExample{
    public static void main(String args[]){
        //creating HashSet and adding elements to it
        HashSet<Integer> hashSet=new HashSet();
        hashSet.add(1);
        hashSet.add(5);
        hashSet.add(4);
        hashSet.add(3);
        hashSet.add(2);
        //getting an iterator for the collection
        Iterator<Integer> i=hashSet.iterator();
        //iterating over the value
        while(i.hasNext())  {
            System.out.println(i.next());
        }
    }
}

انتاج |

1 2 3 4 5
كما ترون فإنه لا يحافظ على ترتيب الإدراج.

ArrayDeque

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

مثال

import java.util.*;
public class ArrayDequeExample {
   public static void main(String[] args) {
       //creating Deque and adding elements
       Deque<String> deque = new ArrayDeque<String>();
       //adding an element
       deque.add("One");
       //adding an element at the start
       deque.addFirst("Two");
       //adding an element at the end
       deque.addLast("Three");
       //traversing elements of the collection
       for (String str : deque) {
            System.out.println(str);
       }
   }
}

انتاج |

اثنان واحد ثلاثة

خريطة التجزئة

إنه تطبيق لواجهة الخريطة المدعومة بجدول التجزئة. يقوم بتخزين أزواج القيمة الرئيسية. لا يسمح بالقيم الخالية. لم تتم مزامنته. ولا يضمن أبدًا أمر الإدراج. يوفر أداءً زمنيًا ثابتًا لطرق مثل get و put . ويعتمد أدائها على عاملين — السعة الأولية وعامل الحمولة . السعة هي عدد المجموعات في جدول التجزئة، وبالتالي فإن السعة الأولية هي عدد المجموعات المخصصة في وقت الإنشاء. عامل التحميل هو مقياس لمدى إمكانية ملء جدول التجزئة قبل زيادة سعته. يتم استخدام طريقة إعادة الصياغة لزيادة السعة وهي تضاعف بشكل أساسي عدد الجرافات.

مثال

import java.util.*;
public class HashMapExample{
    public static void main(String args[]){
        //creating a HashMap
        HashMap<Integer,String> map=new HashMap<Integer,String>();
        //putting elements into the map
        map.put(1,"England");
        map.put(2,"USA");
        map.put(3,"China");

        //get element at index 2
        System.out.println("Value at index 2 is: "+map.get(2));
        System.out.println("iterating map");
        //iterating the map
        for(Map.Entry m : map.entrySet()){
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}

انتاج |

القيمة في الفهرس 2 هي: خريطة الصين المتكررة 1 إنجلترا 2 الولايات المتحدة الأمريكية 3 الصين

الخوارزميات

يوفر لنا إطار عمل المجموعات خوارزميات مختلفة لعمليات مختلفة لتطبيقها على المجموعات. سنلقي نظرة هنا على العمليات الرئيسية التي تغطيها هذه الخوارزميات. أنه يحتوي على خوارزميات تتعلق بـ:
  1. فرز
  2. يبحث
  3. خلط
  4. التلاعب الروتيني بالبيانات
  5. تعبير
  6. إيجاد القيم المتطرفة
لفهم أفضل سنناقش خوارزمية الفرز.

فرز

تقوم خوارزمية الفرز بإعادة ترتيب القائمة وفقًا لعلاقة الترتيب. يتم توفير شكلين من العلاقات.
  1. الترتيب الطبيعي
  2. ترتيب المقارنة

الترتيب الطبيعي

في الترتيب الطبيعي يتم فرز القائمة وفقا لعناصرها.

ترتيب المقارنة

في هذا النوع من الطلب، يتم تمرير معلمة إضافية، وهي عبارة عن مقارنة، مع القائمة. يتم استخدام خوارزمية فرز الدمج المحسنة قليلاً للفرز وهي سريعة ومستقرة لأنها تضمن وقت تشغيل n log(n) ولا تعيد ترتيب العناصر المتساوية. سنستخدم نفس المثال من ArrayList لتوضيح عملية الفرز.

مثال

import java.util.*;
public class SortingExample{
    public static void main(String args[]){
        //Creating arraylist
        ArrayList<String> books=new ArrayList<String>();
        //Adding a book to the arraylist
        books.add("A Time to Kill");
        //Adding a book to the arraylist
        books.add("Absalom, Absalom!");
        //Adding a book to the arraylist
        books.add("The House of Mirth");
        //Adding a book to the arraylist
        books.add("East of Eden");
        //Traversing list through Iterator before sorting
        Iterator itrBeforeSort=books.iterator();
        while(itrBeforeSort.hasNext()){
            System.out.println(itrBeforeSort.next());
        }
        //sorting the books
        Collections.sort(books);
        System.out.println("After sorting the books");
        //Traversing list through Iterator after sorting
        Iterator itr=books.iterator();
        while(itr.hasNext()){
            System.out.println(itr.next());
        }
    }
}

انتاج |

حان الوقت لقتل أبشالوم، أبشالوم! بيت الفرح شرق عدن بعد فرز الكتب وقت قتل أبشالوم، أبشالوم! شرق عدن بيت الفرح

خاتمة

نأمل أن تكون قد فهمت الآن ما هو إطار عمل مجموعات Java، وما هي واجهاته وفئاته وكيفية تنفيذ فئاته المختلفة. يمكنك دائمًا استخدام إطار العمل هذا لتقليل جهودك في Java. لا تتردد في التدرب والعودة إلى هنا عندما تحتاج إلى مزيد من المساعدة. تعلم سعيد!
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION