搜索对象列表并增加其变量之一的最有效方法是什么?另外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;
    }
}

最佳答案

如果要保证每个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);
}


请注意,setter(setVisits())应该将访问值设置为参数的值。增加访问次数确实是违反直觉的。这就是为什么我使用了一个更清晰的incrementVisits方法的原因。

09-26 07:11