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

これは、N ^ 2時間とNメモリコストではなく、2NメモリのコストがかかるO(2N)ソリューションです。持っているアイテムの数によって異なりますが、このソリューションのコストは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 に答える