На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Сортировка Hashmap и вывод верхнего ключа
    Всем привет, по всей видимости проблема легкая, но не могу найти решения

    есть

    ExpandedWrap disabled
      HashMap<Integer, Integer> hm = new HashMap<>();


    значения сортируются в нем следующим методом


    ExpandedWrap disabled
          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 значений, т.е. мне нужен последний сотый ключ, нужно что-то типа
    ExpandedWrap disabled
      System.out.println(hm.get(100));


    Поправьте мои бредни пожалуйста
    Сообщение отредактировано: sourceman -
      Если понадобилось сравнивать элементы на больше-меньше, и сортировать, значит Hashmap - неудачный выбор структуры данных.
        TreeMap тогда использовать?

        Объясню задачу, есть 100 пар ключ-значение, они кладутся в TreeMap(не важно, можно другой тип данных),

        key=value
        1=30
        2=20
        3=50
        4=80
        5=70
        ....

        Мне нужно отсортировать по значению, т.е. самое большое значение 70 должно быть сверху и распечатать его
        Сообщение отредактировано: sourceman -
          Для задачи - узнать или извлечь макс/мин значение - предназначена очередь по приоритетам (Priority Queue).
          Она может быть создана на основе TreeMap, но, вероятно, в джаве есть готовая PriorityQueue

          (TreeMap несколько медленнее, т.к. оно поддерживает более сильную упорядоченность)
          Сообщение отредактировано: MBo -
            В общем обошелся без сортировки, просто получая доступ напрямую к элементу, аля

            ExpandedWrap disabled
              Map<Integer, Integer> mL1 = new LinkedHashMap<>();
              Object firstKey = mL1 .keySet().toArray()[mL1.size()-1];


            Не красиво наверное, но работает :)
              А как hashmap этот набор данных вообще используется?
                Очевидно вы вообще неправильно поставили задачу... Map нужен не для хранения пары ключ-значение, а для доступа к значению по ключу. Вашу задачу, имхо, правильнее было решать списком, элементы которого будут ваши Pair экземпляры.


                ExpandedWrap disabled
                  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:

                ExpandedWrap disabled
                  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();
                                      }
                          });


                а далее как и хотел:

                ExpandedWrap disabled
                  int yourValue = list.get(list.size()-1).getValue();


                Добавлено
                Цитата
                hm всегда вмещает 100 значений,

                о_О тоесть? Хотите сказать что в него нельзя запихнуть 700 элементов? Или вы про размер страницы? Если это размер страницы, зачем вам:
                Цитата
                т.е. мне нужен последний сотый ключ

                ?

                Добавлено
                Цитата
                Не красиво наверное, но работает

                Повторюсь, вы изначально неверно поставили задачу, решив что нужно использовать Map.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0312 ]   [ 16 queries used ]   [ Generated: 24.04.24, 22:04 GMT ]