I need a data structure that provides key-value mappings, like a Map
, but that also allows me to fetch the key based on an (int) index (e.g. myKey = myDS.get(index)
), without having to iterate over the data structure to get the key at the desired index.
I thought of using LinkedHashMap
, but I don't see a way to get the key at a given index. Am I missing something in LinkedHashMap
? Or is there another data structure I can use?
EDIT:
This is not a duplicate. The correct answer to the other question is to use some sort of SortedMap
; however, that is not the correct answer to this question, since I'd like to be able to retrieve an Entry
from the data structure via an Integer
index, which is not supported in any Java library.
LinkedHashMap provides a hash table/doubly linked list implementation of the Map
interface. Since it extends HashMap
, it's still backed by an array, but there is also a doubly-linked list of Entry
objects to ensure that the iteration order is predictable.
So, basically what it means is that when you iterate through the map like so:
for (Map.Entry<keyType,valueType>> entry : linkedHashMap.entrySet())
{
System.out.println("Key: " + entry.getKey().toString() +
" Value: " + entry.getValue.toString());
}
it will print in the order that you added the keys, as opposed to a non-linked Map, which will not print in insertion order. You cannot access the elements of the array like you want to, because the array that backs the hash is not in order. Only the doubly linked list is ordered.
What you are looking for is a LinkedMap from Apache Commons.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With