Java LinkedHashMap получает первую или последнюю запись

Я использовал LinkedHashMap потому что это важно порядок в который ключи, вводимые в карту.

Но теперь я хочу получить значение ключа во-первых (первая вводимая запись) или последнее.

Должен там быть метод как first() и last() или что-то как этот?

У меня должен быть итератор, чтобы просто получить первую ключевую запись? Именно поэтому я использовал LinkedHashMap!

Спасибо!

123
задан rogerdpack 9 December 2015 в 07:15
поделиться

2 ответа

Семантика LinkedHashMap остается семантикой Map, а не LinkedList . Да, он сохраняет порядок вставки, но это деталь реализации, а не аспект его интерфейса.

Самый быстрый способ получить «первую» запись по-прежнему - entrySet (). Iterator (). Next () . Получение «последней» записи возможно, но повлечет за собой перебор всего набора записей путем вызова .next () , пока вы не дойдете до последней. while (iterator.hasNext ()) {lastElement = iterator.next ()}

edit : Однако, если вы Если вы хотите выйти за рамки JavaSE API, Apache Commons Collections имеет собственную реализацию LinkedMap , которая имеет такие методы, как firstKey и lastKey , которые делают то, что вы ищете. Интерфейс значительно богаче.

143
ответ дан 24 November 2019 в 01:17
поделиться

Еще один способ получить первую и последнюю запись в LinkedHashMap - использовать метод toArray для Интерфейс набора.

Но я думаю, что перебор записей в наборе и получение первой и последней записи - лучший подход.

Использование методов массива приводит к предупреждению вида «... требуется неконтролируемое преобразование для соответствия ...» , которое не может быть исправлено [но может быть подавлено только с помощью аннотации @ SuppressWarnings («unchecked»)].

Вот небольшой пример, демонстрирующий использование метода «toArray»:

public static void main(final String[] args) {
    final Map<Integer,String> orderMap = new LinkedHashMap<Integer,String>();
    orderMap.put(6, "Six");
    orderMap.put(7, "Seven");
    orderMap.put(3, "Three");
    orderMap.put(100, "Hundered");
    orderMap.put(10, "Ten");

    final Set<Entry<Integer, String>> mapValues = orderMap.entrySet();
    final int maplength = mapValues.size();
    final Entry<Integer,String>[] test = new Entry[maplength];
    mapValues.toArray(test);

    System.out.print("First Key:"+test[0].getKey());
    System.out.println(" First Value:"+test[0].getValue());

    System.out.print("Last Key:"+test[maplength-1].getKey());
    System.out.println(" Last Value:"+test[maplength-1].getValue());
}

// the output geneated is :
First Key:6 First Value:Six
Last Key:10 Last Value:Ten

6
ответ дан 24 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: