"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استكشاف HashSet: الغوص في مجموعات غير مرتبة

استكشاف HashSet: الغوص في مجموعات غير مرتبة

تم النشر بتاريخ 2024-11-08
تصفح:487

Exploring HashSet: A Dive into Unordered Collections

مقدمة

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


ما هو HashSet؟

مجموعة التجزئة هي:

  • غير مرتبة: العناصر ليس لها تسلسل يمكن التنبؤ به.
  • فريد: يتم تجاهل العناصر المكررة.
  • مدعوم داخليًا بواسطة HashMap: يستخدم HashMap لتخزين العناصر، مع التركيز فقط على المفاتيح أثناء تجاهل القيم.
  • O(1) متوسط ​​التعقيد الزمني: تعتبر العمليات مثل الإدراج والحذف والبحث ذات كفاءة عالية.

1. تهيئة HashSet

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

توضيح:

  • المنشئ الافتراضي: ينشئ HashSet بسعة أولية تبلغ 16.
  • مُنشئ ذو معلمات: يمكنك تحديد السعة الأولية، ولكن لاحظ أن السعة ليست هي نفس الحجم . يشير الحجم إلى العدد الفعلي للعناصر في المجموعة.
  • استخدام مجموعة: يمكن إنشاء HashSet من مجموعة مثل القائمة، مما يضمن الاحتفاظ بالعناصر الفريدة فقط.

2. إضافة عناصر إلى HashSet

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

توضيح:

  • تقوم طريقة add () بإدراج العناصر في HashSet.
  • يتم تجاهل العناصر المكررة. عند محاولة إضافة 1 مرتين، يتم الاحتفاظ بالتواجد الأول فقط.

الوجبات الجاهزة الرئيسية

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


3. التحقق من الحجم مقابل السعة

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

على الرغم من أن سعة setWithInitialCapacity هي 5، فإن size هي 0 لأن الحجم يعكس عدد العناصر الموجودة في المجموعة، وليس السعة الأولية. يمكنك التفكير في السعة باعتبارها مساحة تخزين داخلية، والتي يتم ضبطها عند إضافة العناصر.


4. استخدام HashSet مع المجموعات

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

توضيح:

  • على الرغم من توفير ثلاثة عناصر في القائمة (4، 4، 3)، تم تجاهل القيمة المكررة 4، ولم يتبق سوى عنصرين (3 و 4).
  • ترتيب العناصر لا يمكن التنبؤ به لأن HashSet لا يحافظ على أي إدراج أو ترتيب طبيعي.

إذا كنت بحاجة إلى الاحتفاظ بالعناصر المصنفة، ففكر في استخدام TreeSet، الذي يضمن ترتيب العناصر بترتيب ترتيب تصاعدي.


5. الفهرسة في HashSet – هل هذا ممكن؟

في المقابلات، السؤال الشائع هو ما إذا كان يمكنك استرداد فهرس لعنصر في HashSet. الجواب هو لا، لأن HashSet يستخدم آلية التجزئة لتخزين العناصر، وليس بنية قائمة على الفهرس مثل القائمة أو المصفوفة.


ملخص النقاط الرئيسية

  1. غير مرتبة وفريدة من نوعها: تحتفظ HashSet فقط بالعناصر الفريدة، متجاهلة التكرارات.
  2. مبني على HashMap: يستخدم مفاتيح HashMap الداخلية لتخزين العناصر.
  3. العمليات السريعة: متوسط ​​التعقيد الزمني هو O(1) لإضافة العناصر وإزالتها والتحقق منها.
  4. السعة مقابل الحجم: السعة هي المساحة المخصصة، بينما الحجم هو العدد الفعلي للعناصر.
  5. لا توجد فهرسة: لا يمكنك استرداد العناصر حسب الفهرس بسبب آلية التجزئة.

العلاقة مع HashMap

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


خاتمة

HashSet هي أداة قوية عندما تحتاج إلى مجموعة سريعة وغير مرتبة تتجنب التكرارات. على الرغم من أنه يوفر تعقيدًا زمنيًا

O(1) لمعظم العمليات، إلا أنه يفتقر إلى ميزات مثل الفرز والفهرسة. بالنسبة للمطورين، تساعد معرفة كيفية ارتباط HashSet بـ HashMap على فهم أعمالها الداخلية والاستفادة بشكل أفضل من إطار عمل المجموعات.

في المنشور التالي، سنستكشف

سؤال شائع في المقابلة يتم طرحه بشكل متكرر في المقابلات لاختبار معرفة المرشحين بمفاهيم المجموعات.


المشاركات ذات الصلة

  • أساسيات جافا

  • أساسيات مقابلة المصفوفة

  • أساسيات ذاكرة جافا

تعليمات سعيدة!

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-ondered-collections-4ehb؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3