Как прокрутить 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()
.