2017-06-10 13 views
3

私はリストの巨大なリストを持っています。文字列は、 "ACCEPTED"、 "OK"、 "NOT OK"のいずれかです。特定の値を見つけるためのループリスト

リストに1つのACCEPTEDが含まれている場合、最終値は他の値にかかわらずACCEPTEDである必要があります。 ACCEPTEDがなく、OKがある場合、最終値はOKである必要があります。どちらも表示されない場合、最終値はNOT OKである必要があります。

私はString.contains()メソッドを使用して値に特定の文字列が含まれているかどうかを確認できますが、巨大なリストがあります。したがって、パフォーマンスの問題が発生する恐れがあります。

if(s.contains(("ACCEPTED"))) { 
       value= "ACCEPTED"; 
       break; 
      } else if(s.contains(("OK"))) { 
       value= "OK"; 
       break; 
      } else { 
       value= "NOT OK"; 
      } 

この方法は巨大なリストで機能するのですか、それとも別のものを使用する必要がありますか?

+1

そして、なぜあなたはリストではなくセットを持っていますか? – Tom

+0

私のサービスはリストのみを返します。 – WhoAmI

答えて

1

ArrayList.contains()が十分速ければ、基本的には質問です。これはすでにので、ここで回答されていますArrayList.contains()

時間の複雑さはO(n)です。素人の言葉で言えば、パフォーマンスは直線的に拡大します。 2倍の数のリストを持つリストは、実行に2倍の時間がかかります。これは取得したものとほぼ同じくらい優れていて、パフォーマンスについて心配する必要はありません。

しかし、tomが述べたように、定義上重複値を保存しないSetを使用する方が良いです。

編集:ここでは

が動作するコードの例です、あなたもhereにそれをテストすることができます。

import java.util.*; 

class myCode 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     ArrayList<String> testList = new ArrayList<String>(); 
     String s1 = new String ("ACCEPTED"); 
     String s2 = new String ("OK"); 
     String s3 = new String ("NOT OK"); 


     testList.add(s1); 
     testList.add(s2); 
     testList.add(s3); 


     String status= ""; 

     if(testList.contains("ACCEPTED")) { 
      status= "ACCEPTED"; 
     } 
     else if(testList.contains("OK")) { 
      status= "OK"; 
     } 
      else { 
      status= "NOT OK"; 
     } 
     System.out.println(status); 

    } 
} 
+0

しかし、常にそれはNOT OKを返します。私の要件によると、ステータス値のいずれかがACCEPTEDであればACCEPTEDを返します。ここに私のコードがあります:Status s1 = new Status( "ACCEPTED");ステータスs2 =新規ステータス( "OK"); ステータスs3 =新規ステータス( "NOT OK"); testList.add(s1); testList.add(s2); testList.add(s3); 文字列ステータス= ""; if(testList.contains( "ACCEPTED")){ status = "ACCEPTED"; } else if(testList.contains( "OK")){ status = "OK"; } else { status = "NOT OK"; } – WhoAmI

+0

@WhoAm私の編集を参照してください。 – Hami

関連する問題