2013-01-17 23 views
10

Co oznacza dwukropek w Javie? Mam to:Co oznacza dwukropek w Javie?

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

Jest to znane jako pętla for-each, możesz chcieć google i do teraz żadna z odpowiedzi nie nazywa tego jeszcze. – 11684

+0

możliwy duplikat [Jak działa Java dla każdej pętli?] (Http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work) –

+1

Odpowiedzi na te pytania wydaje się nie być kompletny: Co to jest: import hudson.model.SCMS; (...) SCMS: dla (SCM scm: scmTriggerItem.getSCMs()) {coś();}? – Gustave

Odpowiedz

5
(String i : words) 

Dla każdego elementu w words

: wskazać pozycję iterator i przedmiot jako i

więc odpowiedzieć - to oznacza dla-każdej pętli

12

Oznacza to jedno, jest to ulepszona pętla for.

for (String i: words) 

oznacza to samo, co

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

Joshua Bloch, w pkt 46 jego warto przeczytać Effective Java, mówi co następuje:

Instrukcja for-each Pętla, wprowadzona w wersji 1.5, pozbywa się bałaganu i szansy na błąd, całkowicie ukrywając zmienną iteratora lub indeksu. Powstały idiom odnosi się również do zbiorów i tablic:

Korzystny idiom do iteracji po zbiorach i tablic

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

Gdy pojawi się dwukropek (:), czytać ją jako „w”. W związku z powyższym powyższa pętla brzmi "dla każdego elementu e w elementach". Zauważ, że nie ma kary za wydajność użycia pętli for, nawet w przypadku tablic. W rzeczywistości może w niektórych okolicznościach oferować niewielką przewagę wydajności nad zwykłą pętlą for, ponieważ oblicza limit indeksu tablicy tylko jeden raz. Chociaż możesz to zrobić ręcznie (pozycja 45), programiści nie zawsze to robią.

+0

To _ jest takie samo, ale czy są one dla JVM naprawdę takie same? – 11684

+0

nie, nie są one takie same. Foreach jest używany w kolekcjach, w których długość pętli można wywnioskować z liczby elementów dostępnych w kolekcji. Możesz to zrobić w dowolny sposób, ale foreach jest syntaktycznym cukrem wykorzystywania kolekcji. – Abraham

+0

W takim przypadku, czy możesz uwzględnić to w swojej odpowiedzi? OP nie jest prawdopodobnie doświadczonym programistą Java i uważam, że najlepiej jest nauczyć się poprawnych rzeczy od samego początku. – 11684

0

Jest for-each pętli. Gdy zobaczysz dwukropek (:) przeczytaj go jako "w" Możesz znaleźć bardzo dobre wyjaśnienie w dokumentach Oracle z dołączonymi przykładami, here