從HashMap獲取第一個鍵和值

    1.概述

    在本教程中,我們將討論如何在不知道鍵的情況下HashMap

    首先,我們將使用迭代器,然後使用流來獲取第一個條目。最後,我們將討論要獲取第一個條目時HashMap

    2.使用迭代器

    考慮一下我們具有以下HashMap<Integer, String>

    Map<Integer, String> hashMap = new HashMap<>();
    
     hashMap.put(5, "A");
    
     hashMap.put(1, "B");
    
     hashMap.put(2, "C");

    在此示例中,我們將使用iterator來獲取第一個鍵值對。因此,讓我們在HashMapentry set iterator ,並調用next()方法來檢索第一個條目:

    Iterator<Map.Entry<Integer, String>> iterator = hashMap.entrySet().iterator();
    
    
    
     Map.Entry<Integer, String> actualValue = iterator.next();
    
     Map.Entry<Integer, String> expectedValue = new AbstractMap.SimpleEntry<Integer, String>(1, "B");
    
    
    
     assertEquals(expectedValue, actualValue);

    3.使用Java流

    另一種方法是使用Java Stream API。 entry set上創建一個流,並調用findFirst()方法以獲取其第一個條目:

    Map.Entry<Integer, String> actualValue = hashMap.entrySet()
    
     .stream()
    
     .findFirst()
    
     .get();
    
    Map.Entry<Integer, String> expectedValue = new AbstractMap.SimpleEntry<Integer, String>(1, "B");
    
    
    
     assertEquals(expectedValue, actualValue);

    4.廣告訂單有問題

    為了解決這個問題,讓我們記住如何創建hashMap ,將對5=A作為第一個條目插入,然後對1=B進行插入,最後對2=C進行插入。讓我們通過打印HashMap的內容進行檢查:

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

    如我們所見,排序是不一樣的。 HashMap class實現不能保證插入順序

    現在讓我們向hashMap添加一個元素:

    hashMap.put(0, "D");
    
    
    
     Iterator<Map.Entry<Integer, String>> iterator = hashMap.entrySet().iterator();
    
    
    
     Map.Entry<Integer, String> actualValue = iterator.next();
    
     Map.Entry<Integer, String> expectedValue = new AbstractMap.SimpleEntry<Integer, String>(0, "D");
    
    
    
     assertEquals(expectedValue, actualValue);

    如我們所見,第一個條目再次更改(在這種情況下, 0=D這也證明HashMap不保證插入順序。

    因此,如果我們想保留訂單,則應改用LinkedHashMap

    Map<Integer, String> linkedHashMap = new LinkedHashMap<>();
    
     linkedHashMap.put(5, "A");
    
     linkedHashMap.put(1, "B");
    
     linkedHashMap.put(2, "C");
    
     linkedHashMap.put(0, "D");
    
    
    
     Iterator<Map.Entry<Integer, String>> iterator = linkedHashMap.entrySet().iterator();
    
     Map.Entry<Integer, String> actualValue = iterator.next();
    
     Map.Entry<Integer, String> expectedValue = new AbstractMap.SimpleEntry<Integer, String>(5, "A");
    
    
    
     assertEquals(expectedValue, actualValue);

    5.結論

    在這篇簡短的文章中,我們討論了從HashMap獲取第一個條目的不同方法。

    需要注意的最重要一點是HashMap實現不能保證任何插入順序。因此,如果我們有興趣保留插入順序,則應使用LinkedHashMap

    該代碼示例可從GitHub上獲得