קבל את המפתח והערך הראשונים מ- HashMap

1. סקירה כללית

במדריך זה נדון כיצד להשיג את צמד ערכי המפתח הראשון מ- מפת גיבוב בלי לדעת את המפתח.

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

2. שימוש באינטרטור

בואו ניקח בחשבון שיש לנו את הדברים הבאים מפת גיבוב:

מפה hashMap = HashMap חדש (); hashMap.put (5, "A"); hashMap.put (1, "B"); hashMap.put (2, "C");

בדוגמה זו נשתמש ב- איטרטר כדי להשיג את צמד ערכי המפתח הראשון. אז בואו ניצור איטרטר על ערכת כניסה של ה מפת גיבוב ולקרוא ל הַבָּא() שיטה לאחזור הערך הראשון:

איטרטור iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (expectValue, actualValue);

3. שימוש בזרם ג'אווה

גישה אחרת היא להשתמש ב- Java Stream API. בואו ניצור זרם ב- ערכת כניסה ולקרוא ל findFirst () שיטה לקבלת הכניסה הראשונה שלה:

Map.Entry actualValue = hashMap.entrySet () .stream () .findFirst () .get (); 
Map.Entry expectValue = new AbstractMap.SimpleEntry (1, "B"); assertEquals (expectValue, actualValue);

4. בעיה בצו ההכנסה

כדי להציג בעיה זו, בואו נזכור כיצד יצרנו מפת גיבוב, הזוג 5 = א הוכנס כערך הראשון, אז 1 = B ולבסוף 2 = ג. בואו נבדוק זאת על ידי הדפסת התוכן שלנו מפת גיבוב:

System.out.println (hashMap);
{1 = B, 2 = C, 5 = A}

כפי שאנו רואים, ההזמנה אינה זהה. ה שיעור HashMap היישום אינו מבטיח את צו הכניסה.

בואו כעת נוסיף אלמנט אחד נוסף ל- מפת גיבוב:

hashMap.put (0, "D"); איטרטור iterator = hashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (0, "D"); assertEquals (expectValue, actualValue);

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

כך, אם אנו רוצים לשמור על הצו, עלינו להשתמש ב- LinkedHashMap במקום זאת:

מפה linkedHashMap = חדש LinkedHashMap (); linkedHashMap.put (5, "A"); linkedHashMap.put (1, "B"); linkedHashMap.put (2, "C"); linkedHashMap.put (0, "D"); איטרטור iterator = linkedHashMap.entrySet (). iterator (); Map.Entry actualValue = iterator.next (); Map.Entry expectValue = new AbstractMap.SimpleEntry (5, "A"); assertEquals (expectValue, actualValue);

5. מסקנה

במאמר קצר זה דנו בגישות שונות לקבלת הערך הראשון מא מפת גיבוב.

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

דוגמת הקוד זמינה ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found