Почему массив int[] не надежен в качестве ключа Java HashMapJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему массив int[] не надежен в качестве ключа Java HashMap

Сообщение Anonymous »

При решении проблемы «Групповая анаграмма» в leetcode (Java).
Я использую массив частот символов (int count[] = new int[26]) в качестве ключа в HashMap для группировки анаграмм типа { [1,1,1 ... ] : ["abc","bca","cab"] }. Хотя разные строки могут создавать массивы с одинаковым содержимым, HashMap обрабатывает каждый массив как отдельный ключ, что приводит к неправильной группировке.
Когда я задал вопрос в chatgpt, это меня смутило, например: «Потому что массивы НЕ переопределяют методы равенства() или hashCode()», «array.equals(otherArray) проверяет идентичность ссылки» и « Два разных массива с одинаковым содержимым рассматриваются как разные ключи".
это ответ, который он мне дает, но я все еще не понимаю, почему я не могу использовать Arrays.equals(a, b)?
Почему int[] нельзя использовать непосредственно в качестве ключа HashMap, даже если Arrays.equals() существует в этой ситуации?
Наконец, правильный код в решении: :
class Solution {
public List groupAnagrams(String[] strs) {
Map ans = new HashMap();

for (String s : strs) {
int[] count = new int[26];

// Count frequency of each letter in the string
for (char c : s.toCharArray()) {
count[c - 'a']++;
}

StringBuilder sb = new StringBuilder();
for (int num : count) {
sb.append(num).append("#");
}
String key = sb.toString();
if (!ans.containsKey(key)) {
ans.put(key, new ArrayList());
}
ans.get(key).add(s);
}

return new ArrayList(ans.values());
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ashmap-key
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»