У меня есть действительно странная проблема. У меня есть простая карта, называемая векторами, где я храню StrategyPairs как ключи и Vectors как значения. Когда я печатаю это, я получаю этот результат:Значение карты Java map возвращает null
{[email protected]d7=(1.0;2.0), [email protected]85=(2.0;2.0), [email protected]75=(0.0;2.0), [email protected]e7=(2.0;1.0)}
Как вы можете видеть [email protected]
отображается в вектор (1,2). Теперь я создаю новый StrategyPair. Когда я печатаю его, я получаю [email protected]
(тот же, что и раньше). Однако, если я сейчас звоню vectors.get(strategyPair)
, он возвращает null. Это как-то действительно странно, так как ключ один и тот же (по крайней мере, он печатает то же самое, когда я его печатаю)
Проблема возникает, когда я переименовываю стратегию, например. Я изменяю имя свойства в классе «Стратегия». Затем неожиданно карта, содержащая StrategyPairs (класс оболочки для двух стратегий), испорчена, как я объяснял ранее ...
EDIT: Когда я печатаю HashMap, я все равно получаю тот же результат, что и выше, но следующий код :
for(StrategyPair pair : vectors.keySet()) {
System.out.println(vectors.get(pair));
}
возвращается: нуль (2,0; 2,0) нуль (2,0; 1,0)
Какая карта? Как, по вашему мнению, карта должна идентифицировать два равных ключа? –
@mathiasj Можете ли вы реализовать «toString()' в вашем классе «StartegyPair»? Возможно, что два элемента имеют одинаковый хэш, но не равны. –
Вы переопределили равные и хэш-коды? – immibis