У меня есть HashMap следующего HashMapHashMap возвращает неверное значение для Integer ключа
private Map<Integer, List<CustomClass>> map = new HashMap<>();
Я пытаюсь добавить новую запись в HashMap против ключа Integer и, если ключ существует, то я хочу выберите соответствующий список и добавьте в него новый элемент. Код приведен ниже.
if (this.map.containsKey(//Integer Key)) {
this.map.get(//Integer Key).add(//New List Item);
} else {
List<CustomClass> customClass = new ArrayList<>();
customClass.add(new CustomClass());
this.map.put(//Integer Key, customClass);
}
Реальная проблема заключается в той части, где уже существует ключ, и я пытаюсь использовать HashMap получить функцию
this.map.get(//Integer Key).add(//New List Item);
Это не дает нуль, если не может найти значение Целочисленный ключ, но он довольно часто дает неправильный ArrayList. Теперь я знаю, что HashMap работает с equals и hashCode, поэтому я попытался переопределить эти функции и использовать их вместо Integer Key.
public class CustomHashMapIntegerKey {
private Integer key = 0;
public void setKey(Integer key) {
this.key = key;
}
public Integer getKey() {
return this.key;
}
@Override
public int hashCode() {
return this.key.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (null == obj) return false;
if (this.getClass() != obj.getClass()) return false;
final CustomHashMapIntegerKey customHashMapIntegerKey = (CustomHashMapIntegerKey) obj;
if (null == this.key && null != customHashMapIntegerKey.getKey()) return false;
if (null != this.key) {
if (!this.key.equals(customHashMapIntegerKey.getKey())) return false;
}
return true;
}
}
и изменил мою карту, чтобы использовать этот новый класс для ключа вместо Integer, но я до сих пор застрял на одной и той же задачи, где HashMap, дает неверное значение. Немного детальный пропущено доступен по этой ссылке https://gist.github.com/MAnfal/dc581234ce597a8ff062
Если в HashMap произошла ошибка, вы могли бы узнать об этом в поиске Google (и это уже было исправлено) , Java.lang.Integer также очень маловероятен, чтобы иметь ошибки. Наиболее вероятной причиной вашей проблемы является то, что вы отправляете неправильное целое число в метод «Map.get()». –
Я дважды проверял использование отладчика, включая instanceof, value, логическое значение моего ключа и полученный из hashmap. Я не говорю, что его ошибка Java, но как-то все, что я пробовал, не дает мне подходящего результата. – userunknown
Хеширование зависит от ключа, и если это целое число, то вряд ли «дать [вам] ошибку ArrayList». Повторно проверьте свой код. – Rishav