Chcę dowiedzieć się, czy ciąg znaków, który jest oddzielone przecinkami zawiera tylko te same wartości:Jak znaleźć duplikaty w ciągu znaków?
test,asd,123,test
test,test,test
Tutaj 2nd ciąg zawiera tylko słowo „test”. Chciałbym zidentyfikować te ciągi.
Ponieważ chcę iterować ponad 100 GB, wydajność ma duże znaczenie.
Jaki może być najszybszy sposób określenia wyniku boolean
, jeśli ciąg zawiera tylko jedną wartość wielokrotnie?
public static boolean stringHasOneValue(String string) {
String value = null;
for (split : string.split(",")) {
if (value == null) {
value = split;
} else {
if (!value.equals(split)) return false;
}
}
return true;
}
Opcja 'split' skończy się wąskim gardłem jest znacząca ze względu na alokacji pamięci, jeśli wejście jest 100GB (szczególnie w JRE7). Lepiej trzymaj się 'indexOf'. Możesz nawet nie chcieć używać 'String's, ale zamiast tego używać strumienia wejściowego lub zmapowanej pamięci przez NIO. –
Czy to możliwe, że te wpisy nie mieszczą się w pamięci? Na przykład, czy mogą być dwie wartości po 50 gigów? –