alexander
alexander

Reputation: 31

Scroll LinkedHashMap to key

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

Answers (3)

striving_coder
striving_coder

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:

  1. 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).

  2. 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

user207421
user207421

Reputation: 310936

Sounds like you should be using TreeMap to me. Then you just use TreeMap.headMap().

Upvotes: 1

zapl
zapl

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 Strings with ==, that's just not working.

Upvotes: 1

Related Questions