2017-06-10 2 views
3

Ich habe eine Liste riesige Liste von Zeichenfolgen. Die Zeichenfolgen sind entweder "AKZEPTIERT", "OK" oder "NICHT OK".Schleife über Liste für die Suche nach bestimmten Wert

Wenn die Liste einen ACCEPTED enthält, sollte der Endwert ACCEPTED sein, unabhängig von den anderen Werten. Wenn es keine ACCEPTED gibt, aber eine OK ist, sollte der endgültige Wert OK sein. Wenn keiner von ihnen erscheint, sollte der endgültige Wert NOT OK sein.

Ich kann String.contains() Methode verwenden, um die Werte zu überprüfen enthält bestimmte Zeichenfolge, aber ich habe eine riesige Liste. Daher befürchte ich, dass es das Leistungsproblem verursachen wird.

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

Wird diese Methode für große Listen funktionieren, oder muss ich etwas anderes verwenden?

+1

Und warum Sie eine Liste haben Sie und nicht ein Satz? – Tom

+0

Mein Service gibt nur die Liste zurück. – WhoAmI

Antwort

1

Dies ist grundsätzlich eine Frage, wenn ArrayList.contains() schnell genug ist. Dies wurde bereits SO beantwortet auf:

Zeitkomplexität von ArrayList.contains() ist O(n). In Laien ausgedrückt, skaliert die Leistung linear. Eine Liste mit doppelt so vielen Elementen dauert doppelt so lange. Das ist fast so gut wie es geht und IMO sollten Sie sich keine Gedanken über die Leistung machen.

Aber wie gesagt, ist es besser, eine Set zu verwenden, die per Definition keine doppelten Werte speichert.

EDIT:

Hier ist ein Beispiel für funktionierenden Code, können Sie es auch here testen:

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

Aber immer gibt es zurück, NICHT OK, gemäß meiner Anforderung sollte es AKZEPTIERT zurückkehren, wenn einer der Statuswerte AKZEPTIERT ist. Hier ist mein Code: Status s1 = neuer Status ("AKZEPTIERT"); Status s2 = neuer Status ("OK"); Status s3 = neuer Status ("NOT OK"); testList.add (s1); testList.add (s2); testList.add (s3); String status = ""; if (testList.contains ("AKZEPTIERT")) { status = "AKZEPTIERT"; } sonst if (testList.contains ("OK")) { status = "OK"; } sonst { status = "NICHT OK"; } – WhoAmI

+0

@WhoAmI sehe meine Bearbeitung. – Hami

Verwandte Themen