Программисты, работающие с Java, часто сталкиваются с ситуацией, когда им нужно использовать структуру данных, которая бы ассоциировала ключи с их значениями, но при этом сохраняла порядок вставки элементов. Например, может возникнуть задача добавления значений в структуру данных, а затем вывода этих значений в порядке их добавления.
Однако, при использовании класса Hashtable
, HashMap
или других классов, реализующих интерфейс Map
, порядок вставки элементов не сохраняется. Это связано с тем, что основная идея этих структур данных — обеспечение быстрого доступа к элементам по ключу, а не сохранение порядка их вставки.
Следовательно, при попытке проитерироваться по такой структуре данных и вывести ее элементы, порядок их вывода может существенно отличаться от порядка их добавления.
Map<String, String> map = new HashMap<>(); map.put("one", "1"); map.put("two", "2"); map.put("three", "3"); for(Map.Entry<String, String> entry: map.entrySet()) { System.out.println(entry.getKey() + "/" + entry.getValue()); }
Вывод данного кода может быть в любом порядке, например: «two/2», «one/1», «three/3».
Для решения этой задачи в Java предусмотрен специальный класс LinkedHashMap
, который реализует интерфейс Map
и при этом сохраняет порядок вставки элементов.
Map<String, String> map = new LinkedHashMap<>(); map.put("one", "1"); map.put("two", "2"); map.put("three", "3"); for(Map.Entry<String, String> entry: map.entrySet()) { System.out.println(entry.getKey() + "/" + entry.getValue()); }
Вывод этого кода будет следующим: «one/1», «two/2», «three/3», что соответствует порядку добавления элементов в Map
.
Таким образом, если в Java необходимо использовать структуру данных Map
, которая бы сохраняла порядок вставки элементов, то стоит использовать класс LinkedHashMap
.
Добавить комментарий