2013-01-17 50 views
10

Was bedeutet der Doppelpunkt in Java? Ich habe dies:Was bedeutet der Doppelpunkt in Java?

public static List<String> findAllAnagrams(List<String> words) { 
    List<String> result = new LinkedList<String>(); 
    for(String i : words){ 
     for (String j : words){ 
      if (result.contains(i)) { 
       break; 
      } 
      else if (i == j) { 

      } else { 
       if (areAnagrams(i,j)){ 
        result.add(i); 
        System.out.println(result); 
       } 
      } 
     } 
    }   
    return result; 
} 
+1

Dies ist bekannt als eine for-each-Schleife, möchten Sie vielleicht googeln und bis jetzt hat keine der Antworten es noch benannt. – 11684

+0

mögliches Duplikat von [Wie funktioniert das Java für jede Schleife?] (Http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work) –

+1

Die Antworten auf diese Fragen scheint nicht vollständig zu sein: Was ist das: import hudson.model.SCMS; (...) SCMS: für (SCM scm: scmTriggerItem.getSCMs()) {etwas();}? – Gustave

Antwort

5
(String i : words) 

Für jedes Element in words

: zu Iterator Artikel und Artikel als i

so zu beantworten zeigen - es steht für-jede Schleife

12

Es bedeutet eine Sache, es ist eine erweiterte for-Schleife.

for (String i: words) 

bedeutet die gleichen Dinge wie

for (int i = 0; i < words.length; i++) { 
    // 
} 

Joshua Bloch, in Artikel 46 seiner lesenswert Effective Java, sagt der folgende:

Die for-each Loop, eingeführt in Release 1.5, beseitigt das Durcheinander und die Möglichkeit eines Fehlers, indem der Iterator oder die Indexvariable vollständig ausgeblendet wird. Die sich ergebende Idiom gilt gleichermaßen für Sammlungen und Arrays:

Die bevorzugte Idiom für Iterieren über Sammlungen und Arrays

for (Element e : elements) { 
    doSomething(e); 
} 

Wenn Sie den Doppelpunkt sehen (:), lesen Sie es als „in“. So liest sich die obige Schleife als "für jedes Element e in Elementen". Beachten Sie, dass es für die Verwendung der for-each-Schleife keine Leistungseinbußen gibt, auch nicht für Arrays. Tatsächlich kann es unter bestimmten Umständen einen leichten Leistungsvorteil gegenüber einer gewöhnlichen for-Schleife bieten, da es die Grenze des Array-Index nur einmal berechnet. Während Sie dies manuell tun können (Punkt 45), tun dies Programmierer nicht immer.

+0

Es _acts_ das gleiche, aber sind sie für die JVM wirklich genau das gleiche? – 11684

+0

nein, sie sind nicht gleich. Der Foreach wird mit Sammlungen verwendet, bei denen die Länge der Schleife aus der Anzahl der Elemente in der Sammlung abgeleitet werden kann. Sie können es tun, aber foreach ist syntaktischer Zucker der ausbeutenden Sammlungen. – Abraham

+0

In diesem Fall könnten Sie das in Ihre Antwort aufnehmen? Das OP ist wahrscheinlich kein erfahrener Java-Entwickler, und ich denke, es ist am besten, von Anfang an korrekte Dinge zu lernen. – 11684

0

Es ist foreach-Schleife. Wenn Sie den Doppelpunkt sehen (:) lesen Sie es als "in" Sie können sehr gut Erklärung in Oracle-Dokument mit Beispielen, here