מה זה LinkedHashMap ב-Java?
המחלקה LinkedHashMap של מסגרת Collections היא יישום ה-Hashtable ו- LinkedList של ממשק המפה . הוא מאחסן את הערכים שלו ב- Hashtable ומשתמש ברשימה מקושרת כפולה באופן פנימי כדי לשמור על סדר ההכנסה. LinkedList זה מגדיר את סדר ההכנסה שהוא הסדר שבו הוכנסו מפתחות למפה . ה- HashMap סיפק את היתרון של הכנסה מהירה , חיפוש ומחיקה , אך ב- LinkedHashMap היישום של LinkedList שומר גם על סדר ההכנסה.
תכונות של LinkedHashMap
- הוא מכיל ערכים המבוססים על מפתח.
- הוא מכיל אלמנטים ייחודיים.
- ייתכן שיהיה לו מפתח null אחד וערכי null מרובים.
- זה לא מסונכרן.
- זה שומר על סדר ההכנסה שגורם לאיטרציה להיות יקרה יותר.
גורמי ביצועים
הביצועים של LinkedHashMap תלויים בעיקר בשני גורמים המתוארים להלן.קיבולת
הקיבולת פירושה מספר הערכים שהוא יכול לאחסן. קיבולת ברירת המחדל היא 16 אם לא מסופק פרמטר. מקדם העומס מקדם העומס פירושו בכל פעם שה- HashMap מאוכלס לאחוז מסוים המסופק כפרמטר, נוצר HashMap חדש בעל גודל כפול, וכל הערכים מועברים לחדש זה. ברירת המחדל של גורם הטעינה עבור HashMap הוא 0.75 . זה ידוע גם בשם יחס המילוי .הצהרת LinkedHashMap
כדי ליצור LinkedHashMap , ראשית, עלינו לייבא את החבילה, שהיא java.util.LinkedHashMap .LinkedHashMap<Key, Value> lhm = new LinkedHashMap<>(12, 0.5f);
כאן, מפתח הוא סוג המפתחות במפה. ערך הוא סוג הערכים הממופים במפה. 12 הוא הקיבולת מה שאומר שהוא יאחסן 12 ערכים במפה. 0.5f הוא מקדם העומס כלומר כאשר 50% מאוכלס אז זה יצור מפה חדשה ויעביר את כל הערכים למפה החדשה הזו.
שיטות נפוצות של LinkedHashMap
להלן רשימה של כמה שיטות נפוצות של LinkedHashMap .שיטות | תיאור |
---|---|
ברור() | מסיר את כל המיפויים במפה. |
containsValue(ערך אובייקט) | מחזירה true אם המפה ממפה את המפתח לערך שצוין. |
entrySet() | מחזירה את תצוגת הסט של המיפויים במפה. |
get (מפתח אובייקט) | מחזירה את הערך מול המפתח שצוין או null אם לא צוין מפתח. |
סט מפתחות() | מחזירה את תצוגת הסט של המפתחות במפה. |
ערכים() | מחזירה את תצוגת האוסף של הערכים במפה. |
getOrDefault(מפתח אובייקט, V defaultValue) | מחזירה את הערך שאליו משויך המפתח שצוין או defaultValue אם לא משויך מפתח. |
LinkedHasMap דוגמה
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of odd numbers
LinkedHashMap<String, Integer> oddNumbers = new LinkedHashMap<>();
// Using the put() method
oddNumbers.put("One", 1);
oddNumbers.put("Three", 3);
System.out.println("LinkedHashMap1: " + oddNumbers);
// Creating another LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("Two", 2);
// Using putAll() method
numbers.putAll(oddNumbers);
System.out.println("LinkedHashMap2: " + numbers);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet() method
System.out.println("Keys: " + numbers.keySet());
// Using values() method
System.out.println("Values: " + numbers.values());
// Using get() method
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault() method
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
// Using remove() method
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
}
}
תְפוּקָה
LinkedHashMap1: {One=1, Three=3} LinkedHashMap2: {Two=2, One=1, Three=3} מיפוי מפתח/ערך: [Two=2, One=1, Three=3] מקשים: [Two, One , שלוש] ערכים: [2, 1, 3] מספר מוחזר: 3 מספר מוחזר: 5 ערך שהוסר: 2 מיפוי מפתח/ערך: [One=1, Three=3]
LinkedHashMap לעומת HashMap
בואו נראה כמה הבדלים ביניהם, בעוד ששניהם מיישמים את ממשק המפה .- LinkedHashMap שומרת על סדר ההכנסה כשהיא מיישמת את הרשימה המקושרת כפול באופן פנימי.
- LinkedHashMap זקוק ליותר אחסון מכיוון שהיא מיישמת את ה- LinkedList .
- לגבי ביצועים, ה- LinkedHashMap איטי יותר מ- HashMap .
GO TO FULL VERSION