java - 在java中搜索对象列表并增加该对象的变量的最有效方法

标签 java performance optimization memory-management data-structures

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

相关文章:

java - Modelmapper 无法映射整个模型?

linux - Linux 中时钟之间的差异(CLOCK_MONOTONIC、CLOCK_REALTIME、CLOCK_SGI_CYCLE 等)

c++ - 为什么双重优先于 float ?

c++ - 编译器如何有效地优化 getline()?

java - 从文本字段获取字符串

java - Python 列表与 Java 数组效率

java快速旋转缓冲图像

java - 从导入的 cplex 模型动态设置项因子

java - Libgdx:如何在X轴上移动对象而不重叠?

c++ - 基准测试 : get algorithm user time