Самый эффективный способ поиска в списке объектов, а также приращения переменной этого объекта в Java - PullRequest
0 голосов
/ 21 февраля 2012

Каков наиболее эффективный способ поиска в списке объектов, а также приращения одной из его переменных? Также функция addData () вызывает 10000 раз и в этом списке есть максимум 30 diff-diff ключей с переменной приращением.

Спасибо

public void addData(List<DataWise> wise ,String name) 
    {
        if(wise!=null)
        {

            for (DataWise dataWise : wise) {

                if(dataWise.getName().equals(name))
                {
                    dataWise.setVisits(1);
                    return;
                }
            }
        }
        DataWise dataWise2=new DataWise(name,1);
        wise.add(dataWise2);
    }

public class DataWise 
{

    private String name;
    private int visits;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getVisits() {
        return visits;
    }
    public void setVisits(int visits) {
        this.visits+= visits;
    }
}

1 Ответ

2 голосов
/ 21 февраля 2012

Если гарантируется, что имя каждого DataWise уникально в списке, используйте HashMap<String, DataWise>, где ключ String - это имя DataWise.Это приведет к O (1) вместо O (n):

Map<String, DataWise> map = new HashMap<String, DataWise>();
...
DataWise wise = map.get(name);
if (wise != null) {
    wise.incrementVisits();
}
else {
    wise = new DataWise(name, 1);
    map.put(name, wise);
}

Обратите внимание, что установщик (setVisits()) должен установить значение посещения равным значению аргумента.Увеличение количества посещений действительно нелогично.Вот почему я использовал incrementVisits метод, который намного понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...