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();
}
3 Answers 3
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 thanLinkedHashMap
, since former is faster. If you want store elements sorted, useTreeMap
(but beware it is slower than the other types ofMap
).When you create instance of container in Java, you are better off using interface (like
Map
,List
orSet
) in the left part of assignment and implementation (likeHashMap
,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. useHashMap
instead ofLinkedHashMap
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.
-
I want to print the list up to a specific value , not print a single valuealexander– alexander11/27/2014 23:44:00Commented Nov 27, 2014 at 23:44
-
@alexander That is crucial information which should be part of your question.VGR– VGR11/27/2014 23:51:50Commented Nov 27, 2014 at 23:51
-
String me = i.next(); in this line i have an error of mismatch.alexander– alexander11/28/2014 00:05:08Commented Nov 28, 2014 at 0:05
-
@alexander: If you're satisfied with the answer, would you consider accepting it? Thanks!striving_coder– striving_coder11/28/2014 00:45:59Commented Nov 28, 2014 at 0:45
-
@alexander: So can you accept it then? (Seeing you're new here, a quick explanation just in case: it's the custom here at StackOverflow to "accept" the answer which the question author has found the most useful. Such accepted answer is marked by green tick-mark and shows up at the very top, right below the answer.) Thanks!striving_coder– striving_coder11/29/2014 00:04:24Commented Nov 29, 2014 at 0:04
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.
Sounds like you should be using TreeMap
to me. Then you just use TreeMap.headMap()
.
while(!i.next().getKey().equals(quattro))
instead because with the condition you have now you will only print entry for "quattro".