Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Java > Сортировка Hashmap и вывод верхнего ключа |
Автор: sourceman 04.04.16, 20:55 |
Всем привет, по всей видимости проблема легкая, но не могу найти решения есть <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> HashMap<Integer, Integer> hm = new HashMap<>(); значения сортируются в нем следующим методом <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue( Map<K, V> map ) { Map<K,V> result = new LinkedHashMap<>(); Stream <Entry<K,V>> st = map.entrySet().stream(); st.sorted(Comparator.comparing(e -> e.getValue())).forEach(e ->result.put(e.getKey(),e.getValue())); return result; } и затем мне нужно получить последний ключ, т.е. просто его вывести, но знаний не хватает, hm всегда вмещает 100 значений, т.е. мне нужен последний сотый ключ, нужно что-то типа <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> System.out.println(hm.get(100)); Поправьте мои бредни пожалуйста |
Автор: MBo 05.04.16, 02:29 |
Если понадобилось сравнивать элементы на больше-меньше, и сортировать, значит Hashmap - неудачный выбор структуры данных. |
Автор: sourceman 05.04.16, 06:27 |
TreeMap тогда использовать? Объясню задачу, есть 100 пар ключ-значение, они кладутся в TreeMap(не важно, можно другой тип данных), key=value 1=30 2=20 3=50 4=80 5=70 .... Мне нужно отсортировать по значению, т.е. самое большое значение 70 должно быть сверху и распечатать его |
Автор: MBo 05.04.16, 06:52 |
Для задачи - узнать или извлечь макс/мин значение - предназначена очередь по приоритетам (Priority Queue). Она может быть создана на основе TreeMap, но, вероятно, в джаве есть готовая PriorityQueue (TreeMap несколько медленнее, т.к. оно поддерживает более сильную упорядоченность) |
Автор: sourceman 10.04.16, 09:16 |
В общем обошелся без сортировки, просто получая доступ напрямую к элементу, аля <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Map<Integer, Integer> mL1 = new LinkedHashMap<>(); Object firstKey = mL1 .keySet().toArray()[mL1.size()-1]; Не красиво наверное, но работает |
Автор: MBo 10.04.16, 10:03 |
А как hashmap этот набор данных вообще используется? |
Автор: VisualProg 14.04.16, 06:16 |
Очевидно вы вообще неправильно поставили задачу... Map нужен не для хранения пары ключ-значение, а для доступа к значению по ключу. Вашу задачу, имхо, правильнее было решать списком, элементы которого будут ваши Pair экземпляры. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> public class MyIntPair { private int name; private int value; public MyIntPair(int name, int value){ this.name=name; this.value=value; } public int getName(){ return name; } public int getValue(){ return value; } } Далее обычный List: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> List<MyIntPair> list = new ArrayList<MyIntPair>(); ... Collections.sort(list,new Comparator<MyIntPair>() { @Override public int compare(MyIntPair o1, MyIntPair o2) { return o1.getValue()-o2.getValue(); } }); а далее как и хотел: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> int yourValue = list.get(list.size()-1).getValue(); Добавлено Цитата hm всегда вмещает 100 значений, о_О тоесть? Хотите сказать что в него нельзя запихнуть 700 элементов? Или вы про размер страницы? Если это размер страницы, зачем вам: Цитата т.е. мне нужен последний сотый ключ ? Добавлено Цитата Не красиво наверное, но работает Повторюсь, вы изначально неверно поставили задачу, решив что нужно использовать Map. |