Как стать автором
Обновить

Комментарии 5

Суровая статья, никто не комментирует. Много хороших советов, спасибо!

Рад, что советы оказались полезными :) Пользуйтесь!

У меня в проектах больше всего проблем создаёт String.equals(), который посимвольно проверяет равенство двух строк. Это очень сильно сказывается на поиске в разных 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


Если очень нужно, то лучше взять самописное решение (есть по ссылке)

Нюанс у меня ещё в том, что проекты для Андроид, где нет VM оптимизаций для String.equals().
Классы для дедупликаций упираются в то же самое посимвольное сравнение.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории