搜索对象列表并增加其变量之一的最有效方法是什么?另外 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
方法,更加清晰。
关于java - 在java中搜索对象列表并增加该对象的变量的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375270/