2009-05-08 17 views

Odpowiedz

28

equalsIgnoreCasemoże być dużo szybciej. Rozważmy na przykład dwa ciągi, które zaczynają się od tych samych 10 000 znaków - ale jeden z nich ma na końcu dodatkową postać. equalsIgnoreCase może natychmiast wrócić; compareToIgnoreCase musi iterować do końca łańcucha, aby zobaczyć różnicę.

Ale generalnie chciałbym pójść z tym, który lepiej wyraża twój zamiar. Działa to również dobrze dla wydajności: zakładając, że mam rację mówiąc, że equalsIgnoreCase jest co najmniej tak szybki jak compareToIgnoreCase, to znaczy, że powinieneś użyć tego, gdzie możesz - jeśli potrzebujesz rzeczywistego zamówienia, musisz mimo to użyć compareToIgnoreCase.

+0

@Dvvoter: Daj powód? –

+0

equalsIgnoreCase() ma pewne zasadnicze różnice w porównaniu do ToToIgnoreCase(). Dla 1, testuje równość == najpierw, zanim faktycznie zobaczy, czy wszystkie znaki są takie same. CompareTo zawsze dokona pełnego porównania znaków, ale nie uwzględni locale. Więc naprawdę musisz wiedzieć, które porównanie zastosować, a następnie porównać je. –

10

jeśli martwić występów ... mierzyć to

+1

Zbyt łatwo! Musi być sposób, który marnuje więcej ludzi! – Bombe

+0

Rzeczywiście, bardzo ładna odpowiedź nie jest? – dfa

+4

Bardzo łatwo jest dojść do błędnych wniosków, stosując pomiar w tym przypadku, ponieważ wynik bardzo zależy od dokładnie tego, co mierzysz. Dobrze jest najpierw zdobyć trochę wiedzy - patrz przykład Jona Skeeta na dobry przykład. –

4

Patrząc na źródło dla java.lang.String

public boolean equalsIgnoreCase(String anotherString) { 
    return (this == anotherString) ? true : 
      (anotherString != null) && (anotherString.count == count) && 
     regionMatches(true, 0, anotherString, 0, count); 
} 

Więc zanim to wygląda na rzeczywistej ciąg znaków po znaku (co zdarza się również w podobny sposób dla compareToIgnoreCase) equalsIgnoreCase sprawdza również jako odniesienie tożsamość i długość postaci, które mogłyby być znacznie szybsze.

+0

Może to być strata czasu, gdy większość strun jest inna :) –

+0

z pewnością jest to kompromis. Ale te dwa porównania są bardzo szybkie, więc nie tracisz zbyt wiele. Porównanie długości powinno być dość skuteczne (bardzo szybko wykryć wiele różnych ciągów znaków). – Thilo

Powiązane problemy