Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> List с Indexом и Value - нужно ускорить нахождение 
V
    Опции темы
firedrago
Дата 10.2.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



Всем привет!
у меня есть таких 2 класса - можно ли это как-то усовершенствовать, что б быстрее находилось Value, а то если подряд надо вытащить до 500-1000 Values (типа resList.getValue(ID)) становится грустно.... smile
Код

import java.util.ArrayList;

public class ResList {

    private ArrayList<ResItem>list = new ArrayList<ResItem>();
    
    public ResList() {
        
    }
    
    public void add(ResItem resItem) {
        list.add(resItem);
    }
    
    public void add (int key, String value) {
        list.add(new ResItem(key, value));
    }
    
    public void add (int key, int value) {
        list.add(new ResItem(key, new Integer(value).toString()));
    }

    public void add (int key, long value) {
        list.add(new ResItem(key, new Long(value).toString()));
    }

    public void add(int key, boolean value) {
        list.add(new ResItem(key, new Boolean(value).toString()));        
    }
    
    public ResItem get(int key) {
        return (getIndexWithKey(key) == -1) ? new ResItem() : list.get(getIndexWithKey(key));
    }
    
    public String getValue(int key) {
        String res = (getIndexWithKey(key) == -1) ? "" : list.get(getIndexWithKey(key)).getValue();
        return (res == null) ? "" : res;
    }
    
    public int getIntValue(int key) {
        return (getIndexWithKey(key) == -1) ? -1 : new Integer(list.get(getIndexWithKey(key)).getValue()).intValue();
    }

    public long getLongValue(int key) {
        long res = -1;
        if(list.get(getIndexWithKey(key)).getValue() != null) {
            res = (getIndexWithKey(key) == -1) ? -1 : new Long(list.get(getIndexWithKey(key)).getValue()).longValue();
        }
        return res;
    }

    public boolean getBooleanValue(int key) {
        return (getIndexWithKey(key) == -1) ? false : new Boolean(list.get(getIndexWithKey(key)).getValue()).booleanValue();
    }

    private int getIndexWithKey(int key) {
        int index = -1;
        boolean abort = false;
        for(int i=0; i<size() & !abort; i++) {
            if(list.get(i).getKey() == key) {
                index = i;
                abort = true;
            }
        }
        return index;
    }
    
    public int size() {
        return list.size();
    }
}


Код

public class ResItem {

    private int key;
    private String value;
    
    public ResItem() {
        setKey(-1);
        setValue("");
    }
    
    public ResItem(int key, String value) {
        setKey(key);
        setValue(value);
    }

    public int getKey() {
        return key;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

Зарание благодарен!

Это сообщение отредактировал(а) firedrago - 10.2.2006, 18:00
PM MAIL   Вверх
Beard
Дата 10.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



Может для этого лучше использовать хэш таблицу?
Плюс getIndexWithKey(key) используется раза два-три в каждом методе - надо сохранять в локальную перемменную,
а то List пробегается по нескольку раз.
Посмотри еще commons-collections - там есть всякие Fast... коллекшены

PM MAIL   Вверх
firedrago
Дата 10.2.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



может быть - может быть.... пошел я смотреть...
если у кого может примерчик есть - буду признателен!
PM MAIL   Вверх
Beard
Дата 10.2.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.7.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 9



Вобщем - пользую HashMap какой-нить:
Код

    HashMap<Integer, String> map = new HashMap<Integer, String>();

...
    void put(int key, String str) {
        map.put(new Integer(key), str);
    }

    String get(int key) {
        map.get(new Integer(key));
    }


и т.д.

И не надо никакой дополнительный класс ResItem
Добавлено @ 18:16
Ошибся
Код

   String get(int key) {
        return map.get(new Integer(key));
    }

Добавлено @ 18:18
Кстати - вместо конструкций типа
Код

new Long(value).toString()


лучше использовать
Код

        String.valueOf(value)


PM MAIL   Вверх
firedrago
Дата 10.2.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



@Beard - большое спасибо! скорость заметно увелечилась!
smile

Это сообщение отредактировал(а) firedrago - 10.2.2006, 23:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.