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

أهم الاختلافات الرئيسية بين HashSet وTreeSet في Java

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

Top Key Differences Between HashSet and TreeSet in Java

1. نظرة عامة على HashSet وTreeSet

قبل الغوص في الاختلافات، دعونا نراجع بإيجاز ما هما HashSet وTreeSet.

1.1 ما هو هاشتاج؟

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

1.2 ما هو TreeSet؟

A TreeSet عبارة عن مجموعة تنفذ واجهة NavigableSet. ويستخدم شجرة حمراء وسوداء للتخزين، مما يعني أنه يتم تخزين العناصر بطريقة مرتبة ومنظمة. لا يسمح TreeSet بتكرار العناصر أيضًا، ولكنه مثالي للمواقف التي تحتاج فيها إلى الحفاظ على الترتيب الطبيعي للعناصر.

2. الاختلافات الرئيسية بين HashSet وTreeSet

2.1 الطلب

  • HashSet: لا يحافظ على أي ترتيب للعناصر. الترتيب الذي تتم به إضافة العناصر لا يرتبط بالترتيب الذي تم تخزينها به.
  • TreeSet : يقوم بترتيب العناصر تلقائيًا بناءً على ترتيبها الطبيعي أو مقارنة محددة.

2.2 الأداء

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

2.3 آلية التخزين الداخلي

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

مثال على الكود:

Set hashSet = new HashSet();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Mango");

TreeSet: يستخدم شجرة حمراء وسوداء داخليًا. يتم وضع كل عنصر وفقًا لترتيبه الطبيعي أو للمقارنة المتوفرة، مما يضمن بقاء الشجرة متوازنة.

مثال على الكود:

Set treeSet = new TreeSet();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Mango");

2.4 العناصر الفارغة

  • HashSet : يسمح بعنصر فارغ واحد، حيث يمكنه تجزئة القيمة الخالية.
  • TreeSet : لا يسمح بالعناصر الفارغة لأنه يحتاج إلى مقارنة العناصر لفرزها، ومقارنة القيم الخالية بأي كائن يؤدي إلى NullPointerException.

2.5 التزامن

  • HashSet : غير متزامن بشكل افتراضي، ولكن يمكن مزامنته باستخدام Collections.synchronizedSet.
  • TreeSet : لا تتم مزامنتها أيضًا بشكل افتراضي، ولكن يمكن مزامنتها بنفس الطريقة.

2.6 العناصر المكررة

لا يسمح كل من HashSet وTreeSet بالعناصر المكررة. ومع ذلك، تختلف طريقة اكتشاف التكرارات. يستخدم HashSet أساليب hashCode () ويساوي ()، بينما يستخدم TreeSet الأسلوب compareTo () أو Comparator.

2.7 استخدام الذاكرة

  • HashSet: يتطلب بشكل عام المزيد من الذاكرة بسبب جدول التجزئة الأساسي وإمكانية قيام القوائم المرتبطة بمعالجة التصادمات.
  • TreeSet : يستخدم ذاكرة أقل لأنه يستخدم بنية شجرة ولكن لديه حمل أكبر في الحفاظ على النظام.

2.8 مقارنة مع LinkedHashSet

HashSet مقابل LinkedHashSet: في حين أن HashSet لا يضمن أي طلب، فإن LinkedHashSet يحافظ على ترتيب الإدراج. من ناحية أخرى، يقوم TreeSet بفرز العناصر بشكل طبيعي أو بواسطة مقارن مخصص.

2.9 حالات الاستخدام

  • HashSet: يُفضل استخدامه عندما يكون التركيز على وقت الوصول السريع ولا يكون الطلب مهمًا.
  • TreeSet: مثالي للسيناريوهات التي تحتاج إلى الوصول إلى العناصر بترتيب مصنف.

2.10 نتيجة العرض التوضيحي: ترتيب التكرار

يوضح تشغيل مقتطفات التعليمات البرمجية أدناه الفرق في ترتيب التكرار:

// HashSet Example
Set hashSet = new HashSet();
hashSet.add("Zebra");
hashSet.add("Apple");
hashSet.add("Mango");
System.out.println("HashSet: "   hashSet); 
// Output may be unordered, e.g., [Apple, Mango, Zebra]

// TreeSet Example
Set treeSet = new TreeSet();
treeSet.add("Zebra");
treeSet.add("Apple");
treeSet.add("Mango");
System.out.println("TreeSet: "   treeSet); 
// Output will be sorted, e.g., [Apple, Mango, Zebra]

3. الاستنتاج

يتلخص الاختيار بين HashSet وTreeSet في احتياجاتك المحددة:

  • استخدم HashSet عندما تحتاج إلى مجموعة عالية الأداء دون الاهتمام بترتيب العناصر.
  • استخدم TreeSet عندما تحتاج إلى فرز العناصر بشكل طبيعي أو حسب ترتيب مخصص.

هل لديك أي أسئلة؟ لا تتردد في إسقاط التعليق أدناه!

اقرأ المشاركات المزيد على : أهم 10 اختلافات رئيسية بين HashSet وTreeSet في Java

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/anh_trntun_4732cf3d299/top-10-key-differences-between-hashset-and-treeset-in-java-49f3?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3