ההבדל בין HashMap ל- Hashtable בג'אווה
תוֹכֶן
HashMap ו- Hashtable, שניהם משמשים לייצוג א קבוצת חפצים שמיוצגים ב
בואו נראה לתרשים ההשוואה המוצג להלן כדי ללמוד עוד כמה הבדלים בין HashMap ל- Hashtable.
- טבלת השוואה
- הגדרה
- הבדלים עיקריים
- קווי דמיון
- סיכום
טבלת השוואה
בסיס להשוואה | מפת גיבוב | טבלת גיבוב |
---|---|---|
הטמעה / הרחבה | כיתת HashMap מיישמת את ממשק המפה ומרחיבה את מחלקת AbstractMap. | ה- Hashtable משתרע משיעור מילון מורשת אך הוא מהונדס מחדש ועכשיו הוא גם מיישם את ממשק המפה. |
סנכרון | HashMap אינו מסונכרן, ומכאן שאובייקט HashMap אינו מוגן בהברגה. | Hashtable מסונכרן, ומכאן שאובייקט Hashtable הוא חוט בטוח. |
מפתחות / ערך | מקש יכול להחזיר את Null פעם אחת בלבד, אך ערך יכול להחזיר את Null בכל מספר זמן. | מקש אינו יכול להחזיר את Null שכן הוא משמש להשגת קוד ה- Hash שישמש כאינדקס של טבלת ה- Hash, וגם ערך אינו יכול להחזיר את Null. |
קיבולת ראשונית ברירת מחדל | קיבולת ראשונית ברירת המחדל של HashMap היא 16. | קיבולת ראשונית ברירת המחדל של Hashtable היא 11. |
חוצה | HashMap חוצה איטרטור. | כמו ש- Map Hashtable גם אינו תומך ישירות ב- Iterator לצורך חצייה ומכאן שהוא משתמש ב- Enumerator. |
הגדרת HashMap
HashMap הוא שיעור שמיישם את ה- מפה ממשק ומרחיב את מפת מופשט הכיתה משתמשת בטבלת החשיש. האובייקט של HashMap מתייחס לאוסף / סט של / * K מייצג מפתח, ו- V מייצג ערך * / HashMap בכיתה הקבלן הראשון הוא קונסטרוקטור ברירת מחדל המאתחל אובייקט ריק של HashMap עם קיבולת ברירת מחדל של 16 ויחס מילוי ברירת המחדל של 0.75. הקבלן השני מאתחל את מפת החשיש בערך של m. הקבלן השלישי יוצר מפת חשיש עם הקיבולת הראשונית המתאימה לערך המסופק בטיעון "קיבולת". הקונסטרוקטור הרביעי מאתחל מפת חשיש עם קיבולת ויחס מילוי המסופקים בפרמטרים. הבה נלמד כעת כיצד להזין את הערכים במפת חשיש. Hashmap hm = Hashmap חדש (); hm.put ("אג'יי", 275); hm.put ("Vijay", 250); hm.put ("ג'וני", 150); hm.put ("ירדן", 200); System.out.ln (hm); / * פלט * / {וויג'יי = 250, ג'וני = 150, אג'יי = 275, ירדן = 200} בקוד שלמעלה אתה יכול לראות שיצרתי אובייקט HashMap ריק hm עם קיבולת ראשונית ברירת מחדל ויחס מילוי ברירת מחדל. ואז הכנסתי ארבע ערכים במפת החשיש בשיטת put (K, V) הממפה את המפתח לערך. אתה יכול לראות שהערכים אינם ערוכים ברצף שאתה מאכיל אותם מכיוון שסדר הכניסה אינו קבוע. כעת, שקלו מקרה שכבר יש לכם ערך Hashtable הוא כיתה המרחיבה את מילון כיתה שהיא כיתת מורשת ונמצאת מחדש בהטמעת היישום מפה ממשק. ה- Hashtable משתמש בטבלת ה- hash כמבנה הנתונים שלה. ה- Hashtable דומה ל- HashMap שכן גם כאן האובייקט של Hashtable מתייחס לאוסף הרשומות בהן כל רשומה היא זוג של / * K מציין את המפתח ו- V מציין את הערך המשויך למפתח * / class Hashtable בקוד לעיל, הקונסטרוקטור הראשון הוא קונסטרוקטור ברירת מחדל שיוצר אובייקט ריק ממעמד Hashtable, גודל ברירת המחדל שלו הוא 11 ויחס המילוי של ברירת המחדל הוא 0.75. הקבלן השני יוצר טבלת חשיש בגודל המתאים לערך המסופק בפרמטר "גודל". הקבלן השלישי יוצר טבלת חשיש בגודל ויחס מילוי המסופקים בפרמטר. הקבלן הרביעי מאתחל את טבלת החשיש עם הערך m. כעת נלמד כיצד להכניס את ה- Hashtable ht = Hashtable חדש (); ht.put (hashCode חדש (2), 275); ht.put (hashCode חדש (12), 250); ht.put (hashCode חדש (16), 150); ht.put (hashCode חדש (8), 200); System.out.ln (ht); / * פלט * / {12 = 250, 16 = 150,2y = 275, 8 = 200} בקוד לעיל יצרתי אובייקט ריק מ- Hashtable והכנסתי ארבע ערכים בשיטת put (). בשיטת הפנימי התקשרתי ל- hashCode () המחשבת ומחזירה את ערך קוד ה- hash אשר ישמש כערך האינדקס של אובייקט הכניסה. כפי שאתה יכול לראות לא ציינתי את גודל טבלת החשיש כך שברירת המחדל היא תהיה 11. גם כאן, סדר ההכנסה לא נשמר ומכאן, כאשר ערכי עריכה לא הופיעו ברצף שהוא מוזן. HashMap הוא טוב יותר בביצועים מכיוון שהאובייקטים שלו אינם מסונכרנים וכמה חוטים יכולים לפעול עליו באותו הזמן ומכאן שהוא מהיר יותר מ- Hashtable.
הגדרת Hashtable
קווי דמיון:
סיכום: