Powiedzmy, że nazwałem replaceAll() na dużym łańcuchu, który zastąpił 1000 pasujących wystąpień. Czy to oznacza, że 1000 ciągów zostało utworzonych i ponownie przydzielonych w procesie z powodu niezmienności łańcucha? Czy są jakieś szybsze alternatywy?Czy wydajność string.replaceAll() cierpi na niezmienność łańcucha?
6
A
Odpowiedz
13
-1
można spróbować z StringBuffer/StringBuilder, ponieważ są one ZmienneCharSequence s:
CharSequence veryBigString = new StringBuilder();
Pattern.compile(regex).matcher(veryBigString).replaceAll(replacement);
+1
Nie ma znaczenia, czy 'bardzoBigString' jest zmienne; 'replaceAll()' nadal utworzy nowy StringBuffer do wykonania pracy i zwróci wynik jako nowy String. Czy to był twój punkt widzenia? –
pamiętać, że tworząc nowy wzór może być kosztowne. W zależności od tego, jak często jest on wywoływany, może być wydajniejsze tworzenie Wzorca i tworzenie Matchera. Profilowanie aplikacji zawsze będzie zawierało informacje, czy jest to konieczne, czy przedwczesna optymalizacja. – AngerClown