Комментарии 5
Суровая статья, никто не комментирует. Много хороших советов, спасибо!
У меня в проектах больше всего проблем создаёт String.equals(), который посимвольно проверяет равенство двух строк. Это очень сильно сказывается на поиске в разных Map-ах.
Если надо напрямую сравнить, то быстрее всего работает вариант:
Или сравнивать только по хеш-коду, если строгое равенство контента не особо критичено, особенно на длинных строках.
А при вставке в Map-ы и при поиске в них, в качестве ключа, желательно строки интернировать, чтобы избежать посимвольного сравнения. Но некоторые разработчики высказываются категорически против интернирования вообще, по причине мифической утечки памяти.
Если надо напрямую сравнить, то быстрее всего работает вариант:
public static boolean equals(@Nullable String str1, @Nullable String str2) {
return str1 == str2 ||
(str1 != null && str2 != null
&& str1.length() == str2.length()
&& str1.compareTo(str2) == 0);
}
Или сравнивать только по хеш-коду, если строгое равенство контента не особо критичено, особенно на длинных строках.
А при вставке в Map-ы и при поиске в них, в качестве ключа, желательно строки интернировать, чтобы избежать посимвольного сравнения. Но некоторые разработчики высказываются категорически против интернирования вообще, по причине мифической утечки памяти.
С интернированием есть нюанс: и-ние с помощью String.intern()
— это зло, см. https://youtu.be/SZFe3m1DV1A?t=1912
Если очень нужно, то лучше взять самописное решение (есть по ссылке)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Ах, эти строки