جافا خريطة التجزئة و خريطة الشجرة كلاهما فئات إطار عمل مجموعات Java. عادةً ما يعمل تطبيق Java Map كجدول تجزئة مُجمَّع. عندما تصبح الدلاء كبيرة جدًا، فإنها تتحول إلى عقد TreeNodes ، كل منها منظم بشكل مشابه لتلك الموجودة في java.util.TreeMap .
خريطة التجزئة
تنفذ HashMap خريطة، قابلة للاستنساخ و قابل للتسلسل واجهه المستخدم. يمتد AbstractMap فصل. تنتمي إلى java.util طَرد.
- يحتوي HashMap على قيمة بناءً على المفتاح.
- قد يحتوي على مفتاح فارغ واحد وقيم فارغة متعددة.
- لا يحافظ HashMap على الترتيب أثناء التكرار.
- أنه يحتوي على عناصر فريدة من نوعها.
- يعمل على مبدأ التجزئة.
خريطة الشجرة
تمتد فئة TreeMap AbstractMap الطبقة وتنفذ NavigableMap , قابل للاستنساخ ، و قابل للتسلسل واجهه المستخدم. TreeMap هو مثال على SortedMap . يتم تنفيذه بواسطة الشجرة ذات اللون الأحمر والأسود، مما يعني أنه يتم فرز ترتيب المفاتيح.
- يحتوي TreeMap أيضًا على قيمة تعتمد على المفتاح.
- يتم فرز TreeMap حسب المفاتيح.
- أنه يحتوي على عناصر فريدة من نوعها.
- لا يمكن أن يحتوي على مفتاح فارغ ولكن يحتوي على قيم فارغة متعددة.
- المفاتيح مرتبة تصاعديًا.
- يقوم بتخزين الكائن في هيكل الشجرة.
أوجه التشابه بين HashMap وTreeMap
- كلا الفئتين تمتد AbstractMap فصل.
- الخريطة هي كائن يخزن قيمة المفتاح أزواج. في زوج المفتاح والقيمة، يكون كل مفتاح فريدًا، ولكن قد تكون قيمه فريدة ينسخ .
- تمثل كلا الفئتين التعيين من مفتاح ل قيم .
- كلتا الخريطتين ليستا كذلك متزامن .
- استخدام الخريطة يضع() طريقة إضافة عنصر في الخريطة.
- يلقي المكرر أ ConcurrentModificationException إذا تم تعديل الخريطة بأي شكل من الأشكال.
الفرق الرئيسي بين HashMap و TreeMap هو:
خريطة التجزئة لا يحافظ على ترتيب التكرار بينما خريطة الشجرة الحفاظ على الطلب باستخدام قارن ب() طريقة أو أ المقارنة تم تعيينه في مُنشئ TreeMap.
يصف الجدول التالي الاختلافات بين HashMap وTreeMap.
أساس | خريطة التجزئة | خريطة الشجرة |
---|---|---|
تعريف | جافا خريطة التجزئة هو تطبيق قائم على التجزئة لواجهة الخريطة. | جافا خريطة الشجرة هو تطبيق قائم على هيكل الشجرة لواجهة الخريطة. |
تنفيذ الواجهة | تنفذ HashMap خريطة، قابلة للاستنساخ ، و قابل للتسلسل واجهه المستخدم. | تنفذ TreeMap NavigableMap، Cloneable ، و قابل للتسلسل واجهه المستخدم. |
المفاتيح/القيم الفارغة | يتيح HashMap أ أعزب مفتاح فارغ و عديد القيم الخالية. | لا يسمح TreeMap باطل مفاتيح ولكن يمكن أن يكون عديد القيم الخالية. |
غير متجانسة تجانسا | يسمح HashMap بالعناصر غير المتجانسة لأنه لا يقوم بالفرز على المفاتيح. | يسمح TreeMap بقيم متجانسة كمفتاح بسبب الفرز. |
أداء | HashMap هو أسرع من TreeMap لأنه يوفر أداء ثابت الوقت وهو O(1) للعمليات الأساسية مثل get() و put(). | TreeMap هو بطيء بالمقارنة مع HashMap لأنه يوفر أداء O(log(n)) لمعظم العمليات مثل add() وremove() وcontains(). |
هيكل البيانات | تستخدم فئة HashMap جدول التجزئة . | يستخدم TreeMap داخليًا ملف أحمر-أسود شجرة، وهي شجرة بحث ثنائية ذاتية التوازن. |
طريقة المقارنة | يستخدم يساوي () طريقة هدف فئة لمقارنة المفاتيح. تتجاوزها طريقة يساوي () لفئة الخريطة. | يستخدم قارن ب() طريقة لمقارنة المفاتيح |
وظائف | تحتوي فئة HashMap على وظائف أساسية فقط مثل الحصول على ()، وضع ()، مجموعة المفاتيح () ، إلخ. . | فئة TreeMap غنية بالوظائف، لأنها تحتوي على وظائف مثل: tailMap ()، firstKey ()، lastKey ()، pollFirstEntry ()، pollLastEntry () . |
ترتيب العناصر | لا يحتفظ HashMap بأي ترتيب. | يتم فرز العناصر في النظام الطبيعي (تصاعدي). |
الاستخدامات | يجب استخدام HashMap عندما لا نطلب زوجًا من القيمة الرئيسية بترتيب مفروز. | يجب استخدام TreeMap عندما نطلب زوجًا من القيمة الرئيسية بترتيب مفروز (تصاعدي). |
مثال على HashMap مقابل TreeMap
في المثال التالي، يمكننا ملاحظة أن عناصر HashMap مرتبة بشكل عشوائي بينما يتم ترتيب عناصر TreeMap بترتيب تصاعدي.
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample { public static void main(String args[]) { /*------------HashMap implementation----------------*/ Map hm=new HashMap(); //adding elements to the HashMap hm.put(9, 'Red'); hm.put(12, 'Black'); hm.put(6, 'Green'); hm.put(19, 'White'); System.out.println('HashMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: hm.entrySet()) { //getting keys and values using method System.out.println(entry.getKey() + ' = ' +entry.getValue()); } /*------------TreeMap implementation----------------*/ Map tm=new TreeMap(); //adding elements to the TreeMap tm.put(9, 'Red'); tm.put(12, 'Black'); tm.put(6, 'Green'); tm.put(19, 'White'); System.out.println('TreeMap iteration Order:'); //iteration over map using for each loop for(Map.Entryentry: tm.entrySet()) { //getting keys and values using method //prints list in sorted order System.out.println(entry.getKey() + ' = ' +entry.getValue()); } } }
انتاج: