1. Overview
In this tutorial, we'll discuss how to get the first key-value pair from a HashMap without knowing the key.
First, we'll use an iterator, and then a stream to get the first entry. Finally, we'll discuss a problem the HashMap presents when we want to get the first entry and how to solve it.
2. Using an Iterator
Let's consider we have the following HashMap<Integer, String>:
Map<Integer, String> hashMap = new HashMap<>();
hashMap.put(5, "A");
hashMap.put(1, "B");
hashMap.put(2, "C");
In this example, we'll use an iterator to get the first key-value pair. So, let's create an iterator on the entry set of the HashMap and call the next() method to retrieve the first entry:
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. Using a Java Stream
Another approach is to use the Java Stream API. Let's create a stream on the entry set and call the findFirst() method to get its first entry:
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. Problem With the Insertion Order
To present this problem, let's remember how we created hashMap, the pair 5=A was inserted as the first entry, then 1=B and finally 2=C. Let's check this by printing the content of our HashMap:
System.out.println(hashMap);
{1=B, 2=C, 5=A}
As we can see, ordering is not the same. The HashMap class implementation doesn't guarantee the insertion order.
Let's now add one more element to 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);
As we can see, the first entry has changed again (to 0=D in this case). This also proves that HashMap doesn't guarantee an insertion order.
So, if we want to preserve the order, we should use a LinkedHashMap instead:
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. Conclusion
In this short article, we discussed different approaches to get the first entry from a HashMap.
The most important point to note is that HashMap implementation doesn't guarantee any order of insertion. So, if we're interested in preserving the insertion order, we should use a LinkedHashMap.
The code example is available over on GitHub.
The post Get the First Key and Value From a HashMap first appeared on Baeldung.
Image may be NSFW.Clik here to view.
Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.
