Я столкнулся с этим вопросом во время теста и хотел бы поделиться им с вами. Вопрос заключается в следующем: существуют две строковые переменные x и y. Когда if (x.equals(y) == true), существуют ли две строки. ? Различные реализации хеш-кода, правильное ли решение? Ответ: Неверно, у них одинаковое значение хэш-кода. Анализ. В этом вопросе в основном рассматривается метод доступа к объектам String. Во-первых, мы должны уточнить, что такое значение хэш-кода переменной String. Состояние объекта String, хранящегося в памяти, сохраняется в хеш-таблице. Когда генерируются разные строки, они будут соответствовать хеш-коду. Хэш-код строки получается с помощью метода hashCode(), который возвращает хэш. строки. Код имеет тип int. Хэш-код объекта String рассчитывается по следующей формуле: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Примечание. Используйте алгоритм int, где s[i] — i-й символ строки, n — длина строки, а ^ означает возведение в степень. (Хеш-значение пустой строки равно 0.) Метод hashCode() в данных типа String наследует метод hashCode() в классе Object, и его основная цель — улучшить производительность хеш-таблицы (java.util.Hashtable). . Оптимизация эффективности доступа. При появлении двух идентичных строк объявления новый экземпляр объекта не будет создаваться заново, а существующий хеш-код будет возвращен и передан в соответствующую ссылку. Давайте представим общее соглашение HashCode, которое примерно таково: во время выполнения Java-приложения, когда метод hashCode вызывается для одного и того же объекта дважды, одно и то же целое число должно возвращаться последовательно, при условии, что информация, используемая при сравнении Объект равных не был изменен. Это целое число не обязательно должно оставаться неизменным от одного выполнения приложения к другому выполнению того же приложения. Если два объекта равны в соответствии с методом Equals(Object) (примечание: этот вопрос является типичным примером), то одно и то же целое число должно быть сгенерировано при вызове метода hashCode() для каждого из двух объектов. Если два объекта не равны в соответствии с методом Equals(java.lang.Object), то вызов метода hashCode() для любого объекта не обязательно приведет к созданию разных целочисленных результатов. Однако в практических приложениях генерация разных целочисленных результатов для разных объектов может повысить производительность хеш-таблиц.
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx.
-