Прокрутите LinkedHashMap до ключа

1

Как прокрутить 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();
}
  • 1
    Что не так с вашим текущим подходом (кроме того, что есть синтаксические ошибки, и вы еще не читали stackoverflow.com/questions/513832/… )?
  • 0
    не работает, eclipse предлагает мне приведение в итератор, но как?
Показать ещё 1 комментарий
Теги:
linkedhashmap

3 ответа

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, вам лучше использовать интерфейс (например, Map, List или Set) в левой части назначения и реализации (например, HashMap, ArrayList и т.д.) В правой части, поскольку он дает вам большую гибкость: в случае, если позднее вы решите изменить реализацию одного и того же интерфейса (например, используйте HashMap вместо LinkedHashMap как я предложил выше), вам нужно только изменить одну строку своего кода, где вы создаете этот контейнер, вместо того чтобы изменять все места, где этот контейнер используется.

  • 0
    Я хочу напечатать список до определенного значения, а не печатать одно значение
  • 0
    @alexander Это важная информация, которая должна быть частью вашего вопроса.
Показать ещё 9 комментариев
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 с ==, который просто не работает.

  • 0
    отлично работает отлично, спасибо большое
1

Похоже, вы должны использовать TreeMap для меня. Затем вы просто используете TreeMap.headMap().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню