Android ArrayList迭代

时间:2012-10-18 06:17:18

标签: android arraylist

我有一个存储区域名称的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
        }
    }             
}

3 个答案:

答案 0 :(得分:7)

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

这样更有效,更快,而不是通过索引进行迭代。 因此,这将逐步检查area_IdList中的每个元素以及area_idListduplicate中的所有元素,并且每次它们不是马赫时,将做出此决定。 (如果这是你想要达到的目的)

答案 1 :(得分: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
    }
  }

至于不使用索引,请参阅Use Enhanced For Loop Syntax

答案 2 :(得分:0)

您可以尝试这样

 for(String areaId : area_IdList){
    if(!area_IdListduplicate.contains(areaId){
    //some decision
    }
    }