如何将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());
}
还有几点:
如果不需要按添加顺序存储元素,请使用
HashMap
而不是LinkedHashMap
,因为前者更快。如果要对存储元素进行排序,请使用TreeMap
(但要注意它比其他类型的Map
慢)。当你在Java中创建容器的实例时,你最好在赋值的左侧使用接口(如
Map
,List
或Set
),在右侧使用实现(如HashMap
,ArrayList
等),因为它给了你更大的灵活性:如果你以后决定改变同一接口的实现(例如,使用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()
.