Reputation: 31
How do I scroll a LinkedHashMap
to a specific key? Something like this:
LinkedHashMap<String,String> queque = new LinkedHashMap<String,String>();
queque.put("uno","uno");
queque.put("due","due");
queque.put("tre","tre");
queque.put("quattro","quattro");
queque.put("cinque","cinque");
Iterator i = queque.entrySet().iterator();
while(i.next().getKey().equals(quattro)) {
System.out.print(i.getKey() + ": ");
System.out.println(i.getValue());
i.next();
}
Upvotes: 1
Views: 152
Reputation: 798
You don't have to explicitly iterate (unless you really want to) to get the value by key: just use get()
method:
System.out.println("quattro" + ": " + queque.get("quattro"));
If you want to print all the values up to the certain one, you can do the following:
Iterator i = queque.entrySet().iterator();
while(i.hasNext()) {
Map.Entry<String, String> me = i.next();
if (me.getKey() == "quattro") break;
System.out.println(me.getKey() + ": " + me.getValue());
}
Or, a little more elegant:
for (Map.Entry<String, String> me : queque.entrySet()) {
if (me.getKey() == "quattro") break;
System.out.println(me.getKey() + ": " + me.getValue());
}
Couple more points:
If you do not need to store the elements in the order they were added, use HashMap
rather than LinkedHashMap
, since former is faster. If you want store elements sorted, use TreeMap
(but beware it is slower than the other types of Map
).
When you create instance of container in Java, you are better off using interface (like Map
, List
or Set
) in the left part of assignment and implementation (like HashMap
, ArrayList
etc.) in the right part since it gives you much more flexibility: in case you later on decide to change the implementation of the same interface (e.g. use HashMap
instead of LinkedHashMap
as I suggested above), you only need to change one line of your code where you create this container, rather than change all places where this container is used.
Upvotes: 2
Reputation: 310936
Sounds like you should be using TreeMap
to me. Then you just use TreeMap.headMap()
.
Upvotes: 1
Reputation: 63955
If you want to do it right with Iterator
you would do
Iterator<Entry<String, String>> i = queque.entrySet().iterator();
while (i.hasNext()) {
Entry<String, String> entry = i.next();
if ("quattro".equals(entry.getKey()))
break;
System.out.println(entry.getKey() + ": " + entry.getValue());
}
But that is equivalent to using an enhanced for loop like so:
for (Entry<String, String> entry : queque.entrySet()) {
if ("quattro".equals(entry.getKey()))
break;
System.out.println(entry.getKey() + ": " + entry.getValue());
}
with Iterator
you'll have to check hasNext()
, only then call next()
once(!) per loop or your iterator would advance by two elements. You should also never compare String
s with ==
, that's just not working.
Upvotes: 1