Я использовал LinkedHashMap
потому что это важно порядок в который ключи, вводимые в карту.
Но теперь я хочу получить значение ключа во-первых (первая вводимая запись) или последнее.
Должен там быть метод как first()
и last()
или что-то как этот?
У меня должен быть итератор, чтобы просто получить первую ключевую запись? Именно поэтому я использовал LinkedHashMap
!
Спасибо!
Семантика LinkedHashMap
остается семантикой Map, а не LinkedList
. Да, он сохраняет порядок вставки, но это деталь реализации, а не аспект его интерфейса.
Самый быстрый способ получить «первую» запись по-прежнему - entrySet (). Iterator (). Next ()
. Получение «последней» записи возможно, но повлечет за собой перебор всего набора записей путем вызова .next ()
, пока вы не дойдете до последней. while (iterator.hasNext ()) {lastElement = iterator.next ()}
edit : Однако, если вы Если вы хотите выйти за рамки JavaSE API, Apache Commons Collections имеет собственную реализацию LinkedMap
, которая имеет такие методы, как firstKey
и lastKey
, которые делают то, что вы ищете. Интерфейс значительно богаче.
Еще один способ получить первую и последнюю запись в 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