Как создать итератор (путем реализации iterable) в Hashmap, если он не сохраняет порядок? Мои ключи следует заказывать .. и я хочу итерации по убываниюреализация итератора с истребителем к Hashmap - возможно ли это?
ответ
Используйте TreeMap
может быть:
Карта сортируются в соответствии с естественным порядком его ключей
Кроме того, из TreeMap.keySet()
документации:
возвращает набор вид ключей, содержащихся на этой карте. итераторы Сета возвращают ключи в порядке возрастания
Итерация пример:
TreeMap<K,V> tree;
// ...
for (final String key : tree.keySet()) {
final V value = tree.get(key);
}
Это правда, что HashMap
не сохраняет порядок вставки. Но, вы можете использовать LinkedHashMap
из которых Javadoc говорит (частично)
Хеш таблица и реализация связанного списка интерфейса
Map
с предсказуемым порядком итерации.
да, но связанныйhasmap не имеет метода get (index) .. – Ohad
@Shiran Correct (как 'HashMap') он имеет [' get (Object key) '] (http://docs.oracle.com/javase/ 7/документы/API/Java/Util/LinkedHashMap.html # прибудет% 28java.lang.Object% 29). В вашем вопросе говорилось 'HashMap', а не' List'. –
, так что в основном это та же реализация связанного списка, просто используя get (ключ объекта)? – Ohad
Вы можете скопировать записи из HashMap
в коллекцию, которая сохраняет порядок (как List
) и затем сортируйте их на основе ключей (в обратном порядке). Вы говорите, что хотите сортировать ключи в порядке убывания, поэтому я предполагаю, что ключ реализует Comparable
, но поскольку я не знаю, какой тип вашего ключа, я использовал параметры типа K
и V
в качестве заполнителей.
Map<K, V> map = new HashMap<>();
List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Entry<K, V> o1, Entry<K, V> o2) {
Comparable k1 = (Comparable) o1.getKey();
Comparable k2 = (Comparable) o2.getKey();
return -k1.compareTo(k2);
}
});
Вы можете перебирать набор записей. – August
'Iterator' сам ничего не говорит о порядке, он просто выполняет итерации над элементами коллекции. –
См. Мои обновления PLS – Ohad