مقارنة الأداء بين TreeSet و HashSet في Java

يشرح هذا البرنامج التعليمي جميع الاختلافات والميزات المشتركة بين  < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" > TreeSet< / a>< / span> و HashSet. في الواقع ، هذا سؤال شائع جدا في مجموعات جافا ، مثل ArrayList< / span> مقابل نمط المتجه < / span >< / a> و HashTable< / span> مقابل نمط HashMap< / span>. ربما يكون الاختلاف الأكثر أهمية هو performance.

TreeSet مقابل HashSet< / h2>
1)  < / span >< span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" يوفر >HashSet وقت أداء متسقا للعمليات الأساسية مثل: إضافة ، إزالة< / span> ، نمط < / span >< span = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >يحتوي على < / سبان> و < نمط الامتداد = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >الحجم< / الامتداد>. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >HashSet< / span> أسرع من نمط TreeSet< / span> وسيكون اختيارا جيدا جدا إذا لم تكن بحاجة إلى فرز العناصر ، لأن HashSet< / span> ليس لديه نظام فرز. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >مجموعة الشجرة  وقت السجل (n) المضمون للعمليات الأساسية (< span style = "font-family:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >إضافة< / سبان>,  < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >إزالة< / span>  < / span > et   < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >يحتوي على).

2)  < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >HashSet< / span>  < / span> لا يضمن فرز العناصر. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" يضمن >TreeSet< / span> ترتيب العناصر بترتيب تصاعدي أو تعريفها بواسطة interface قابل للمقارنة< / span >< / a> أو أيا كان ما تحدده في المنشئ المحدد بواسطة واجهة المقارنة< / span >< / a> من Java.

< / div>
3) يعتمد أداء الاجتياز على السعة الأولية وعامل الحمل لنمط HashSet< / span>. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" لا يحتوي >TreeSet على معلمات تؤثر على أداء الدورة التدريبية.

4) TreeSet طرقا لا تحتوي على نمط HashSet :  < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >الأول () < / span > ، < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >last(), headSet () < / span> و tailSet () < / span >.

5) < span style = "عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >HashSet
يستخدم الطريقة  < نمط الامتداد = "اللون: أزرق ؛ عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >يساوي ()< / امتداد> لمقارنة كائنين واكتشاف الكائنات المكررة. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" يستخدم >TreeSet
< نمط الامتداد = "اللون: أزرق ؛ عائلة الخط: " ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >قارن بين () < / الامتداد >. < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" ترجع >equals() true إذا كان كلا الكائنين متساويين و compareTo () < / span> صفر.< / div>

أوجه التشابه بين TreeSet و HashSet في نمط Java< / h2 >< div>HashSet  و  < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >مجموعة الشجرة  لديك الكثير من الأشياء الشائعة ، دعنا نلقي نظرة:

1) كلاهما ينفذ الواجهة
java.util.Set ، CE< / SPAN>< / SPAN>  مما يعني أنها لا تسمح بإدراج عناصر مكررة.

2) لا تتم مزامنة التطبيقين. يمكنك جعلها متزامنة باستخدام النمط Collections.synchronizedSet().

3) إذا كنت تريد مجموعة مرتبة ، فمن الأسرع إضافة عناصر إلى HashSet ثم قم بتحويلها إلى نمط مجموعة الشجرة  من إنشاء نمط TreeSet وإضافة عناصر.

في النهاية ، يمكننا القول أن اختيار الاستخدام يعتمد تماما على احتياجاتك.

مثال على HashSet:

import java.util.HashSet; 

مثال فئة عامة {

الفراغ العام الثابت الرئيسي (سلسلة [] args) {

HashSet< سلسلة> hset = HashSet جديد< سلسلة> (); <عدد صحيح><عدد صحيح>

hset.add("1");
hset.add("3");
hset.add("2");
hset.add("5");

ل (السلسلة s: hset) < br / > System.out.println (s) ؛
}
}

النتيجة:
3
2
1
5
TreeSet مثال:

import java.util.TreeSet; 

مثال فئة عامة {

الفراغ العام الثابت الرئيسي (سلسلة [] args) {

TreeSet< سلسلة> tset = مجموعة الأشجار الجديدة< سلسلة> ();

tset.add("1");
tset.add("3");
tset.add("2");
tset.add("5");

ل (سلسلة s: tset)
System.out.println (s) ؛ <عدد صحيح><عدد صحيح>
}
}

النتيجة:
1
2
3
5
المراجع:
الفرق بين HashSet و TreeSet في Java
Hashset vs Treeset