logo

ההבדל בין HashMap ל-TreeMap

Java מפת גיבוב ו מפת עץ שניהם הם המחלקות של מסגרת Java Collections. הטמעת מפת Java פועלת בדרך כלל כטבלת גיבוב ב-bucketed. כאשר הדליים נעשים גדולים מדי, הם הופכים לצמתים של TreeNodes , כל אחד בנוי באופן דומה לאלו שב java.util.TreeMap .

דפוס עיצוב java

מפת גיבוב

HashMap מיישמת מפה, ניתן לשכפול ו ניתן להסדרה מִמְשָׁק. זה מתרחב מפה מופשטת מעמד. זה שייך ל java.util חֲבִילָה.

  • HashMap מכיל ערך המבוסס על המפתח.
  • ייתכן שיהיה לו מפתח null יחיד וערכי null מרובים.
  • HashMap לא שומרת על סדר בזמן האיטרציה.
  • הוא מכיל אלמנטים ייחודיים.
  • זה עובד על העיקרון של hashing.

מפת עץ

מחלקה TreeMap מתרחבת מפה מופשטת כיתה ומיישם ניווט מפה , ניתן לשחזור , ו ניתן להסדרה מִמְשָׁק. TreeMap היא דוגמה ל-a מפה מסודרת . זה מיושם על ידי העץ האדום-שחור, מה שאומר שסדר המפתחות ממוין.

  • TreeMap מכיל גם ערך המבוסס על המפתח.
  • TreeMap ממוין לפי מפתחות.
  • הוא מכיל אלמנטים ייחודיים.
  • לא יכול להיות לו מפתח null אבל יש לו ערכי null מרובים.
  • המפתחות בסדר עולה.
  • הוא מאחסן את האובייקט במבנה העץ.

קווי דמיון בין HashMap ל-TreeMap

    מפת גיבובו מפת עץ כיתות ליישם ניתן לשחזור ו ניתן להסדרה מִמְשָׁק.
  • שני השיעורים מתארכים מפה מופשטת מעמד.
  • מפה היא אובייקט המאחסן ערך מפתח זוגות. בצמד מפתח-ערך, כל מפתח הוא ייחודי, אבל הערכים שלו עשויים להיות לְשַׁכְפֵּל .
  • שתי המחלקות מייצגות את המיפוי מ מַפְתֵחַ ל ערכים .
  • שתי המפות לא מסונכרן .
  • שימוש במפה לָשִׂים() שיטה להוספת אלמנט במפה.
  • האיטרטור זורק א ConcurrentModificationException אם המפה תשתנה בדרך כלשהי.

ההבדל העיקרי בין HashMap ל-TreeMap הוא:

מפת גיבוב אינו שומר על סדר האיטרציה בזמן שה- מפת עץ לשמור על הסדר באמצעות ה בהשוואה ל() שיטה או א משווה מוגדר בקונסטרוקטור של TreeMap.

הטבלה הבאה מתארת ​​את ההבדלים בין HashMap ל-TreeMap.

בָּסִיס מפת גיבוב מפת עץ
הַגדָרָה Java מפת גיבוב הוא יישום מבוסס hashable של ממשק Map. Java מפת עץ הוא יישום מבוסס מבנה עץ של ממשק מפה.
מימושי ממשק HashMap מיישמת מפה, ניתן לשכפול , ו ניתן להסדרה מִמְשָׁק. TreeMap מיישם NavigableMap, ניתן לשכפול , ו ניתן להסדרה מִמְשָׁק.
מפתחות אפס / ערכים HashMap מאפשר א יחיד מפתח null ו מרובות ערכי null. TreeMap לא מאפשר ריק מפתחות אבל יכול לקבל מרובות ערכי null.
הומוגנית/ הטרוגנית HashMap מאפשר אלמנטים הטרוגניים מכיוון שהוא לא מבצע מיון על מפתחות. TreeMap מאפשר ערכים הומוגניים כמפתח בגלל המיון.
ביצועים HashMap הוא מהיר יותר מאשר TreeMap מכיוון שהוא מספק ביצועים בזמן קבוע שהם O(1) עבור הפעולות הבסיסיות כמו get() ו-put(). TreeMap הוא לְהַאֵט בהשוואה ל-HashMap מכיוון שהוא מספק את הביצועים של O(log(n)) עבור רוב הפעולות כמו add(), remove() ו- contains().
מבנה נתונים מחלקת HashMap משתמשת ב- טבלת גיבוב . TreeMap משתמש באופן פנימי ב- a אדום שחור עץ, שהוא עץ חיפוש בינארי המאזן את עצמו.
שיטת השוואה זה משתמש שווים() שיטת ה לְהִתְנַגֵד שיעור להשוואת מפתחות. השיטה equals() של מחלקה Map עוקפת אותה. הוא משתמש ב- בהשוואה ל() שיטה להשוואת מפתחות.
פונקציונליות מחלקה HashMap מכילה רק פונקציות בסיסיות כמו get(), put(), KeySet() , וכו. . מחלקת 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()); } } } 

תְפוּקָה:

ההבדל בין HashMap ל-TreeMap