Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.116.183] |
|
Сообщ.
#1
,
|
|
|
Всем привет, по всей видимости проблема легкая, но не могу найти решения
есть HashMap<Integer, Integer> hm = new HashMap<>(); значения сортируются в нем следующим методом 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 значений, т.е. мне нужен последний сотый ключ, нужно что-то типа System.out.println(hm.get(100)); Поправьте мои бредни пожалуйста |
Сообщ.
#2
,
|
|
|
Если понадобилось сравнивать элементы на больше-меньше, и сортировать, значит Hashmap - неудачный выбор структуры данных.
|
Сообщ.
#3
,
|
|
|
TreeMap тогда использовать?
Объясню задачу, есть 100 пар ключ-значение, они кладутся в TreeMap(не важно, можно другой тип данных), key=value 1=30 2=20 3=50 4=80 5=70 .... Мне нужно отсортировать по значению, т.е. самое большое значение 70 должно быть сверху и распечатать его |
Сообщ.
#4
,
|
|
|
Для задачи - узнать или извлечь макс/мин значение - предназначена очередь по приоритетам (Priority Queue).
Она может быть создана на основе TreeMap, но, вероятно, в джаве есть готовая PriorityQueue (TreeMap несколько медленнее, т.к. оно поддерживает более сильную упорядоченность) |
Сообщ.
#5
,
|
|
|
В общем обошелся без сортировки, просто получая доступ напрямую к элементу, аля
Map<Integer, Integer> mL1 = new LinkedHashMap<>(); Object firstKey = mL1 .keySet().toArray()[mL1.size()-1]; Не красиво наверное, но работает |
Сообщ.
#6
,
|
|
|
А как hashmap этот набор данных вообще используется?
|
Сообщ.
#7
,
|
|
|
Очевидно вы вообще неправильно поставили задачу... Map нужен не для хранения пары ключ-значение, а для доступа к значению по ключу. Вашу задачу, имхо, правильнее было решать списком, элементы которого будут ваши Pair экземпляры.
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: 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(); } }); а далее как и хотел: int yourValue = list.get(list.size()-1).getValue(); Добавлено Цитата hm всегда вмещает 100 значений, о_О тоесть? Хотите сказать что в него нельзя запихнуть 700 элементов? Или вы про размер страницы? Если это размер страницы, зачем вам: Цитата т.е. мне нужен последний сотый ключ ? Добавлено Цитата Не красиво наверное, но работает Повторюсь, вы изначально неверно поставили задачу, решив что нужно использовать Map. |