0

搜索对象列表并同时增加其中一个变量的最有效方法是什么?另外addData()函数调用10000次,并且在这个列表中最多有30个带有增量变量的diff-diff键。搜索对象列表的最有效方法,也是在java中增加此对象的变量的方法

感谢,

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

目前,代码不起作用。如果'wise'为null,则会在addData()的最后一行获得空指针异常。根据您允许更改界面的数量,您最好使用HashMap 进行查找。 – 2012-02-21 09:50:00

回答

2

如果它guarantteed每个DataWise的名称是在列表中唯一的,使用HashMap<String, DataWise>,其中字符串键是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方法。

+0

但是,我只获得Arraylist的List 而不是Map ,那我该怎么办?请帮助我 - 谢谢, – kamlesh0606 2012-02-21 11:14:39

+0

然后做你在你的问题做了什么。没有比遍历列表更快的方法并找到要修改的元素。 – 2012-02-21 12:09:35

+0

好的,谢谢JB Nizet。 – kamlesh0606 2012-02-21 12:13:40

相关问题