将LinkedHashMap滚动到键

时间:2014-11-27 23:33:03

标签: java linkedhashmap

如何将LinkedHashMap滚动到特定键?像这样:

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 个答案:

答案 0 :(得分:2)

您不必显式迭代(除非您真的想要)按键获取值:只需使用get()方法:

System.out.println("quattro" + ": " + queque.get("quattro"));

如果要打印所有值,请执行以下操作:

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());
    }

或者,更优雅一点:

for (Map.Entry<String, String> me : queque.entrySet()) {
    if (me.getKey() == "quattro") break;
    System.out.println(me.getKey() + ": " + me.getValue());
}

更多要点:

  1. 如果您不需要按添加顺序存储元素,请使用HashMap而不是LinkedHashMap,因为前者更快。如果您希望存储元素已排序,请使用TreeMap(但要注意它比其他类型的Map慢)。

  2. 在Java中创建容器实例时,最好使用 interface (如MapListSet)左侧部分分配和实施(如HashMapArrayList等)在右侧部分,因为它为您提供了更大的灵活性:如果您以后决定更改实现相同的接口(例如,如上所述使用HashMap而不是LinkedHashMap),您只需要更改创建此容器的代码的一行,而不是更改此容器的所有位置使用。

答案 1 :(得分:1)

如果你想用Iterator做正确的事,你会做

    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());
    }

但这相当于使用增强型for循环:

    for (Entry<String, String> entry : queque.entrySet()) {
        if ("quattro".equals(entry.getKey()))
            break;
        System.out.println(entry.getKey() + ": " + entry.getValue());
    }

使用Iterator,您必须检查hasNext(),然后每个循环调用next()一次(!),否则您的迭代器将前进两个元素。您也不应该将String==进行比较,而这只是不起作用。

答案 2 :(得分:1)

听起来你应该对我使用TreeMap。然后你只需使用TreeMap.headMap()