При решении проблемы «Групповая анаграмма» в 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
Почему массив int[] не надежен в качестве ключа Java HashMap ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1770706577
Anonymous
При решении проблемы «Групповая анаграмма» в leetcode (Java).
Я использую массив частот символов (int count[] = new int[26]) в качестве ключа в HashMap для группировки анаграмм типа { [1,1,1 ... ] : ["abc","bca","cab"] }. Хотя разные строки могут создавать массивы с одинаковым содержимым, HashMap обрабатывает каждый массив как отдельный ключ, что приводит к неправильной группировке.
Когда я задал вопрос в chatgpt, это меня смутило, например: «[b]Потому что массивы НЕ переопределяют методы равенства() или hashCode()[/b]», «[b]array.equals(otherArray) проверяет идентичность ссылки[/b]» и « [b]Два разных массива с одинаковым содержимым рассматриваются как разные ключи[/b]".
это ответ, который он мне дает, но я все еще не понимаю, почему я не могу использовать 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());
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79886330/why-int-array-is-not-reliable-as-java-hashmap-key[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия