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

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

    Какой стандартный класс посоветуете?

    Предположим, я выбрал класс TreeMap.
    Вот так я реализовад вставку элемента. Если же такой элемент есть, то суммировал:
    ExpandedWrap disabled
          Integer v = map.put(n,q);
         if (v != null) {
             map.put(n,q+v);
         }

    Мне не нравится, что я использую два поиска. Как оптимальнее?

    Вот так я реализовал изменение значения (опять два посика) :
    ExpandedWrap disabled
      Integer v = map.put(nt,q);
      if (v != null) {
          map.put(nt,q+v);
      }

    как оптимальнее?

    И наконец так я сделал пробег по последовательным элементам с суммированием их значений.
    это оптимально?
    ExpandedWrap disabled
                          SortedMap<Integer, Integer> sm = map.subMap(nf, nt);
                          int s = 0;
                          for (Map.Entry<Integer, Integer> e : sm.entrySet()) {
                              s+=e.getValue();
                          }


    Есть что-то быстрее чем TreeMap?
    Сообщение отредактировано: Rulikkk -
      про экономию на поиске 2м наеврно с интегером тяжело чего сделать, а вот если класс в котором есть поле интегер, то для случая присутсвующих значений можно его получить и изменить это поле, а если отсутсвует то просто вставить, обязательно использовать Integer? но это вроде не по жаве вопрос получится
        Rulikkk, если вашей целью не является увеличение производительности имеещегося решения, то ваши вопросы бессмысленны. Если же вы озадачены именно этим, тогда:

        Цитата Rulikkk @
        Мне не нравится, что я использую два поиска. Как оптимальнее?

        Оптимальнее не использовать java.lang.Integer, потому как он immutable. Я бы сделал примерно так:

        ExpandedWrap disabled
          class IntegerHolder {
              int value;
          }
           
          ...
           
          IntegerHolder v = map.put(nt, q);
           
          if (v != null) {
              q.value += v.value;
          }


        Цитата Rulikkk @
        Есть что-то быстрее чем TreeMap?

        Вроде нет, но следует учесть, что для небольших наборов данных HashMap по-идее должен работать шустрее. Тут уже вам решать, что важнее - сортировка или быстрая выборка/вставка. Я бы отставил сортировку на тот момент, когда она нужна.

        Кстати, есть очень интересное решение для вас - коллекции Trove for Java, а именно gnu.trove.TIntObjectHashMap.
          wind, спасибо большое.
          Цель - именно ускорение.
          Размер дерева -- примерно 50.000 элементов.
          Спасибо, было познавательно.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0249 ]   [ 15 queries used ]   [ Generated: 4.05.24, 21:22 GMT ]