ההבדל בין HashMap ל- LinkedHashMap בג'אווה

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 2 אַפּרִיל 2021
תאריך עדכון: 10 מאי 2024
Anonim
ההבדל בין HashMap ל- LinkedHashMap בג'אווה - טכנולוגיה
ההבדל בין HashMap ל- LinkedHashMap בג'אווה - טכנולוגיה

תוֹכֶן


HashMap ו- LinkedHashMap הם המעמדות, דומים זה לזה ומשמשים ליצירת מפה. כיתת HashMap מרחיבה את כיתת AbstractMap כדי להשתמש בטבלת חשיש לאחסון האלמנטים במפה. מחלקת LinkedHashMap שומרת על הערכים במפה על פי סדר ההכנסה שלהם. התכונה המבדילה את HashMap ו- LinkedHashMap זה מזה מפת גיבוב לא שומר על סדר הערכים המאוחסנים במפה. מצד שני, LinkedHashMap משתמש במבנה נתונים היברידי כדי לשמור על סדר הערכים שבהם הוכנסו. בתרשים השוואה להלן חקרתי כמה הבדלים אחרים בין HashMap ו- LinkedHashMap רק תסתכלו.

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

בסיס להשוואהמפת גיבובLinkedHashMap
בסיסיסדר הכניסה ב- HashMap לא נשמר.סדר הכניסה נשמר ב- LinkedHashMap.
מבנה נתוניםHashMap משתמש ב- HashTable כדי לאחסן מפות.LinkedHashMap משתמש ב- HashTable יחד עם List Linked כדי לאחסן את המפה.
מרחיב / מיישםHashMap מרחיב את AbstractMap ומיישם את ממשק המפה.LinkedHashMap מרחיב את Hashmap.
גרסהHashMap הוצג ב- JDK 2.0.LinkedHashMap הוצג ב- JDK 4.0.
מעליחסית פחות תקורה.יחסית תקורה יותר מכיוון שהיא צריכה לשמור על סדר ערכי המפות.


הגדרת HashMap

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

סדר הכניסה של הרשומות ב- HashMap לא נשמר. הכנסת הערכים במפה שנוצרה באמצעות HashMap מבוססת על קוד ה- hash שמחושב על ידי המקשים בערכים. אם בטעות הזנת מפתח משוכפל ב- HashMap, הוא יחליף את הערך הקודם של אותו מפתח בערך החדש שהוצע ויחזיר את הערך הישן. אם לא נעשה שימוש במפתח משוכפל ולא נערכה החלפה כלשהי, המפתח תמיד מחזיר את Null. הבה נראה כיצד להוסיף את הערכים למפת ה- hash בדוגמה הבאה.

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 והוספתי את הערכים בשיטת Put וכשערכתי את אובייקט HashMap, הערכים לא נערכים בסדר שהם הוכנסו. מכאן שלא ניתן להעמיד פנים שסדר הערכים ב- HashMap יחזור. HashMap משתמש בכל השיטות של ממשק המפה ומחלקת AbstractMap ואינו מציג שום שיטה חדשה; יש לו בנאים משלה. קיבולת ברירת המחדל של מפת החשיש היא 16 ויחס המילוי המוגדר כברירת מחדל הוא 0.75.


הגדרה של LinkedHashMap

LinkedHashMap הוא גם שימוש בכיתה ליצירת מפה. LinkedHashMap מרחיב את מפת גיבוב בכיתה והוצג מאוחר יותר ל- HashMap בגירסת 4.0 של JDK. היותה כיתת ילדים בכיתת HashMap LinkedHashMap זהה לחלוטין לשיעור HashMap כולל הבנאים והשיטות. עם זאת, LinkedHashMap שונה במובן זה שהוא שומר על סדר הכנסת הערכים במפה. מבנה הנתונים המשמש את LinkedHashMap לאחסון המפה הוא רשימה מקושרת ו טבלת גיבוב.

בנוסף לשיטות שיורשו על ידי HashMap, LinkedHashMap מציגה שיטה חדשה אחת שהיא removeEldestEntry (). שיטה זו משמשת להסרת הערך העתיק ביותר במפה. קיבולת ברירת המחדל של LinkedHashMap היא 16 ויחס המילוי המוגדר כברירת מחדל הוא 0.75 הדומה גם לשיעור HashMap.

  1. ההבדל החשוב ביותר הוא שסדר ההכנסה של HashMap הוא לא נשמר ואילו צו ההכנסה של LinkedHashMap הוא השתמר.
  2. מבנה הנתונים שמשמש HashMap לאחסון רכיבי המפה הוא טבלת גיבוב. מצד שני, מבנה הנתונים שמשמש את LinkedHashMap הוא רשימה מקושרת ו טבלת גיבוב.
  3. כיתת HashMap מתארכת מפת מופשט מחלק ומיישם את מפה ממשק. עם זאת, שיעור LinkedHashMap הוא כיתת ילדים של מפת גיבוב מחלקה, כלומר כיתת LinkedHashMap מרחיבה את מחלקת HashMap.
  4. כיתת HashMap הוצגה ב- JDK 2.0 גרסה. כיתת LinkedHashMap הוצגה בהמשך JDK 4.0 גרסה.
  5. יחסית ל- ClassHashMap בכיתה יש יותר תקורה מאשר HashMap מכיוון שהוא צריך לשמור על סדר האלמנטים שהוכנסו במפה.

סיכום:

יש להשתמש ב- LinkedHashMap רק כאשר אנו מודאגים מרצף האלמנטים שהוכנסו במפה.