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()); } } }
תְפוּקָה: