Карта заказа Java
В Java: существует ли объект, который действует как Карта для хранения и доступа к парам ключ/значение, но может возвращать упорядоченный список ключей и упорядоченный список значений, так что списки ключей и значений находятся в одном и том же заказ?
Так как объяснение по коду, я ищу что-то, что ведет себя как моя фиктивная OrderedMap:
OrderedMap<Integer, String> om = new OrderedMap<>();
om.put(0, "Zero");
om.put(7, "Seven");
String o = om.get(7); // o is "Seven"
List<Integer> keys = om.getKeys();
List<String> values = om.getValues();
for(int i = 0; i < keys.size(); i++)
{
Integer key = keys.get(i);
String value = values.get(i);
Assert(om.get(key) == value);
}
Ответы
Ответ 1
Интерфейс SortedMap (с реализацией TreeMap) должен быть вашим другом.
Интерфейс имеет следующие методы:
-
keySet()
, который возвращает набор ключей в порядке возрастания
-
values()
, который возвращает коллекцию всех значений в порядке возрастания соответствующих клавиш
Таким образом, этот интерфейс точно соответствует вашим требованиям. Однако ключи должны иметь значимый порядок. В противном случае вы можете использовать LinkedHashMap, где порядок определяется порядком вставки.
Ответ 2
Есть ли объект, который действует как Карта для хранения и доступа к парам ключ/значение, но может возвращать упорядоченный список ключей и упорядоченный список значений, так что списки ключей и значений находятся в одном порядке?
Вы ищете java.util.LinkedHashMap. Вы получите список пар Map.Entry < K, V > , которые всегда повторяются в одном и том же заказ. Этот порядок совпадает с порядком, в который вы помещаете элементы. В качестве альтернативы используйте java.util.SortedMap, где ключи должны либо иметь естественный порядок, либо задать его Comparator
.
Ответ 3
LinkedHashMap поддерживает порядок ключей.
java.util.LinkedHashMap работает как обычный HashMap.
Ответ 4
Я думаю, что ближайшая коллекция, которую вы получите из фреймворка, - SortedMap
Ответ 5
Я думаю, что интерфейс SortedMap обеспечивает то, что вы просите, и TreeMap реализует это.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html
Ответ 6
Так как Java 6 также неблокирует потокобезопасную альтернативу TreeMap.
См. ConcurrentSkipListMap.
Ответ 7
Вы можете использовать NavigableMap интерфейс, к которому можно получить доступ и пройденный в порядке возрастания или по убыванию. Этот интерфейс предназначен для замены > интерфейса SortedMap. Карта Navigable обычно сортируется в соответствии с естественным порядком ее ключей или компаратором, предоставленным при создании карты.
Есть три наиболее полезные реализации: TreeMap, ImmutableSortedMap и ConcurrentSkipListMap.
Пример TreeMap:
TreeMap<String, Integer> users = new TreeMap<String, Integer>();
users.put("Bob", 1);
users.put("Alice", 2);
users.put("John", 3);
for (String key: users.keySet()) {
System.out.println(key + " (ID = "+ users.get(key) + ")");
}
Вывод:
Alice (ID = 2)
Bob (ID = 1)
John (ID = 3)