5

我有一个存储区域名称的 ArrayList。我想检查此列表以查找任意人是否来自不同地区。如果他们来自不同的地区,我会做出决定。我通过以下代码实现了这一点。注意 area_IdList 和 area_IdListduplicate 本质上是同一个 ArrayList。这段代码是否有效或者任何人都可以建议更有效的代码?提前致谢。

public List<String> area_IdList = new ArrayList<String>();
public List<String> area_IdListduplicate = new ArrayList<String>();

for (int i = 0; i < area_IdList.size(); i++) 
{  
    for (int k = 1; k< area_IdListduplicate.size(); k++)
    {
        String sa= area_IdListduplicate.get(k);
        String sb= area_IdList.get(i);
        if (!sa.equalsIgnoreCase(sb))
        { 
            some decision
        }
    }             
}
4

3 回答 3

8
for (String area : area_IdList) 
{  
    for (String duplicatedArea : area_IdListduplicate)
    {
        if (!area.equalsIgnoreCase(duplicatedArea))
        { 
            // some decision
        }
    }             
}

这更有效,速度更快,而不是按索引迭代。因此,这将逐步检查每个元素area_IdList和所有元素,area_idListduplicate并且每次它们不匹配时,都会做出这个决定。(如果那是你想要实现的)

于 2012-10-18T06:32:18.737 回答
6

这是一个 O(2N) 解决方案,成本为 2N 内存,而不是 N^2 时间和 N 内存成本。取决于您拥有的项目数量,但此解决方案的成本将大大低于 N^2 解决方案。

  Set<String> list=new Set<String>();
  for (String area : area_IdList) 
  {  
    list.add(area.toLowerCase());
  }

  for (String duplicatedArea : area_IdListduplicate)
  {
    if(list.contains(duplicatedArea.toLowerCase())){
      //Do something
    }
  }

至于不使用索引,请参阅使用增强的 For 循环语法

于 2012-10-18T06:41:16.417 回答
0

你可以这样尝试

 for(String areaId : area_IdList){
    if(!area_IdListduplicate.contains(areaId){
    //some decision
    }
    }
于 2012-10-18T06:26:54.680 回答