2013-03-02 5 views
0

Можно ли получить доступ к первым и вторым элементам HashMap отдельно? Я имею в виду, если у меня есть HashMapДоступ к элементам HashMap

Map<Integer, Integer> testMap = new HashMap<Integer, Integer>(); 
int f = testMap.first(); 

Я знаю, что нет такой функции, но как я могу получить доступ к этому элементу?

ответ

2

HashMap не поддерживает порядок.

Этот класс не дает никаких гарантий относительно порядка карты; в в частности, он не гарантирует, что заказ останется постоянным с течением времени.

Reference

Вы можете использовать LinkedHashMap, которые сохраняют порядок ввода или TreeMap.

LinkedHashMap

Эта реализация отличается от HashMap в том, что она поддерживает дважды связанный список проходит через все его записи. Этот связанный список определяет порядок итераций, который обычно является порядком в , ключи которого были вставлены в карту (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если ключ повторно вставлен в карту. (Ключ к повторной установки на карте м, если m.put (к, v) вызывается при m.containsKey (к) будет возвращена истина непосредственно перед вызова.)

TreeMap

Карта сортируется в соответствии с естественным порядком ее ключей или Comparator при условии создания карты в зависимости от того, какой конструктор используется.

+0

Я имею в виду получение первого элемента ввода карты, поэтому, если я поставлю запись testMap.put (1, 2); могу ли я получить доступ к этим 1 и 2 отдельно, сравнить их с другими элементами или сделать некоторые другие вещи с 1 или 2. – user2081119

+0

@ user2081119 вы можете получить значение из карты с помощью 'Map # get (key)', который возвращает значение, связанное с ключом else ноль. –

+0

О, вот и все! спасибо1 – user2081119

0

Карты не упорядочены, поэтому нет такой вещи, как «первая запись», и именно поэтому на Map (или HashMap) отсутствует метод get-by-index.

Вы можете сделать это:

Map<Integer, Integer> map = ...; // wherever you get this from 

// Get the first entry that the iterator returns 
Map.Entry<Integer, Integer> entry = map.entrySet().iterator().next(); 
(Note: Checking for an empty map omitted). 

Ваш код не получает все записи в карте, она немедленно возвращает (и прорывается из цикла) с первой записью, которая найдена.

Примечание: Вызов iterator() не означает, что вы выполняете итерацию по всей карте.

0

нет. вы не можете, поскольку HapMap/HashTable хранит данные в Entry для (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html), которые содержат ключ и значение вместе.

Вы всегда можете получить Итератор entrySet() и получить доступ к записям. Или попробуйте получить keySet(), который возвращает только набор ключей.

надеюсь, что это поможет.

0

Вы можете использовать LinkedHashMap, который имеет методы, такие как firstKey и lastKey.Но для 2-го ключа вы должны итерацию, и вы получите элемент в порядке, в котором ключи введенную в карте

0
HashMap <Integer, Integer> testMap = new HashMap <Integer, Integer>(); 
testMap.put (1, 2); 
testMap.put (2, 3); 
Iterator <Integer> i = testMap.values().iterator(); 
System.out.println ("First element: " + i.next()); 
System.out.println ("Second element: " + i.next()); 

Обратите внимание, что из-за HashMap не помнит, в каком порядке элементы были добавлены в «первый элемент» не необходимое среднее «сначала добавлено».

0
Iterator it = testMap.entrySet().iterator(); 

        while (it.hasNext()) { 
          Map.Entry pairs = (Map.Entry) it.next(); 
          System.out.println("Key"+pairse.getKey()); 
          System.out.println("Value"+pairs.getValue()); 
} 
Смежные вопросы