2015-04-08 2 views
2

У меня есть эта путаница в моем сознании относительно LinkedHashMap. В Set у нас нет пары значений ключа, поэтому, когда мы пытаемся напечатать заданный элемент, мы не получим порядок, сохраненный для элемента печати, как мы вставили, означает, что порядок не сохраняется, но когда мы используем LinkedHashSet, это гарантирует, что порядок будет сохранен, поскольку мы вставили элемент в связанный набор хэшей, а при печати мы получим тот же порядок. Это имеет смысл.Путаница относительно карты и связанного hashmap

Но в случае Map мы печатаем значения только с помощью клавиши, так что же логика в том, что LinkedHashMap сохраняет заказ? Мы должны печатать значения с помощью ключа, поэтому, где бы ни была пара ключей, ключ будет печатать свое значение. Он должен перейти к отображению и поиску этого ключа и, наконец, распечатать его значение.

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

+1

вы также можете перебрать карту. – Pratik

+0

внутренний комплект завернут на карту. посмотрите код HashSet и LinkedHashSet – Prashant

ответ

3

Когда вы итерацию карты будет управлять вашим заказом в связанном Hash карте.

Это не так, что вы всегда получаете значения, используя только ключ. вам нужно получить все элементы с Карты, и вы можете не знать об этом. например, - создание Выберите Drop down using map.

for (Map.Entry<String, String> entry : map.entrySet()) 
{ 
    System.out.println(entry.getKey() + "/" + entry.getValue()); 
} 
3

так, что логика, говоря, что связано хэш-карта сохранения порядка

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

+0

Map m = new HashMap (); \t \t \t \t \t \t m.put (1, "1"); \t \t m.put (2, "2"); \t \t m.put (3, "3"); \t \t m.put (4, "4"); \t \t m.put (5, "5"); \t \t m.put (6, "6"); \t \t m.put (7, "7"); \t \t m.put (8, "8"); \t \t m.put (9, "9"); \t \t m.put (10, "10"); \t \t m.put (11, "11"); \t \t m.put (12, "12"); \t \t m.положим (13, "13"); \t \t m.put (14, "14"); \t \t m.put (15, "15"); \t \t m.put (16, "16"); \t \t m.put (17, "17"); \t \t m.put (18, "18"); \t \t \t \t \t \t \t для (целое число я: m.keySet()) { \t \t \t System.out.print (»«+ m.get (я)); \t \t} – MAX

+0

i всегда получаю вывод 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 16 18 так, что отличается в порядке сохранения в связанной карте хеша – MAX

+0

, если бы я использовал ссылку хэш-карта, я бы получил тот же результат – MAX

2

Прежде всего вы можете получить доступ к значениям карты без использования ключей, вы можете использовать метод values.and все зависит от сценария.

0

Помимо уже упомянутых методов, вы также можете использовать map.forEach() для перебора записей в карте в порядке ввода.