I have a LinkedHashMap. I want to get the Foo at index N. Is there a better way of doing this besides iterating until I find it?:
int target = N;
int index = 0;
for (Map.Entry<String, Foo> it : foos.entrySet()) {
if (index == target) {
return it.getValue();
}
index++;
}
I have to do get random elements from the map by an index about 50 times for some operation. The map will have about 20 items in it.
Thanks
List<Entry<String,Foo>> randAccess = new ArrayList<Entry<String,Foo>>(foos.entrySet());
Then for index N with O(1) access...
randAccess.get(N)
@Mark's solution is spot on. I'd just like to point out that the offsets (positions) of the entries in a map (of any kind) are not stable. Each time an entry is added or removed, the offsets of the remaining entries may change. For a HashMap or LinkedHashMap, you've no way of knowing which entry's offsets will change.
The instability of the offsets and the fact that finding entry at a given offset is expensive for all standard map implementations are the reasons why the Map
interface does not provide a get(int offset)
method. It should also be a hint that it is not a good idea for an algorithm to need to do this sort of thing.
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