滚动链接哈希映射到键



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

您不必显式迭代(除非您确实想要)即可按键获取值:只需使用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中创建容器的实例时,你最好在赋值的左侧使用接口(如MapListSet),在右侧使用实现(如HashMapArrayList等),因为它给了你更大的灵活性:如果你以后决定改变同一接口的实现(例如,使用HashMap而不是我上面建议的LinkedHashMap), 只需更改创建此容器的一行代码,而无需更改使用此容器的所有位置。

如果你想

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==进行比较,那只是不起作用。

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

最新更新