Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.160.61] |
|
Сообщ.
#1
,
|
|
|
Всем доброго времени суток.
Мне нужно сделать сортированный список пар значений <integer, integer>. (сортированный по key. Значение - value) Необходимо, чтобы он был оптимален по времени по след. параметрам: - вставка элемента, а если он есть, то изменение значения. - изменение значения элемента - пробег по последовательным элементам, с доступом к их значениям Какой стандартный класс посоветуете? Предположим, я выбрал класс TreeMap. Вот так я реализовад вставку элемента. Если же такой элемент есть, то суммировал: Integer v = map.put(n,q); if (v != null) { map.put(n,q+v); } Мне не нравится, что я использую два поиска. Как оптимальнее? Вот так я реализовал изменение значения (опять два посика) : Integer v = map.put(nt,q); if (v != null) { map.put(nt,q+v); } как оптимальнее? И наконец так я сделал пробег по последовательным элементам с суммированием их значений. это оптимально? SortedMap<Integer, Integer> sm = map.subMap(nf, nt); int s = 0; for (Map.Entry<Integer, Integer> e : sm.entrySet()) { s+=e.getValue(); } Есть что-то быстрее чем TreeMap? |
Сообщ.
#2
,
|
|
|
про экономию на поиске 2м наеврно с интегером тяжело чего сделать, а вот если класс в котором есть поле интегер, то для случая присутсвующих значений можно его получить и изменить это поле, а если отсутсвует то просто вставить, обязательно использовать Integer? но это вроде не по жаве вопрос получится
|
Сообщ.
#3
,
|
|
|
Rulikkk, если вашей целью не является увеличение производительности имеещегося решения, то ваши вопросы бессмысленны. Если же вы озадачены именно этим, тогда:
Цитата Rulikkk @ Мне не нравится, что я использую два поиска. Как оптимальнее? Оптимальнее не использовать java.lang.Integer, потому как он immutable. Я бы сделал примерно так: 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. |
Сообщ.
#4
,
|
|
|
wind, спасибо большое.
Цель - именно ускорение. Размер дерева -- примерно 50.000 элементов. Спасибо, было познавательно. |