После удаления из коллекции List он все равно каким то образом попадает в HashMap

Есть метод, который удаляет планету из List:

*

**public List<Planet> destroyPlanet(Planet planet) {
        if (planetList.contains(planet)) {
            planetList.remove(planet);
            System.out.println("Планета " + planet.getPlanetName() + " уничтожена");
            return planetList;
        } else {
            System.out.println("Планета " + planet.getPlanetName() + " не найдена");
            return planetList;
        }
    }**

Но после этого эта планета все равно почему- добавляется в Мар:

public HashMap<Planet, Lord> addPlanetToLord(Planet planet, Lord lord) {
        if (lordAndPlanets.containsKey(planet)) {
            System.out.println("У планеты " + planet.getPlanetName() + " есть повелитель");
            return lordAndPlanets;
        } else {
            lordAndPlanets.put(planet, lord);
            System.out.println("Планета " + planet.getPlanetName() + " передана поелителю " + lord.getLordName());
            return lordAndPlanets;
        }
    }

Каким образом HashMap все равно добавляет удаленную планету!? https://github.com/butr1m/nti.team.git По проекту есть еще вопросы, если кто-то согласится ответить, буду благодарен!


Ответы (2 шт):

Автор решения: Vitaly Zotov

Метод destroyPlanet просто удаляет экземпляр объекта planet из списка. Сам объект planet не удаляется. Дальше, в вашем варианте метод addPlanetToLord просто добавляет этот экземпляр планеты в Map.

→ Ссылка
Автор решения: Alex Rudenko

Код в репозитории несколько отличается, но он должен сначала проверить, существует ли планета, то есть, содержится ли она в списке, который возвращается из PlanetService, и только тогда проверять, есть ли у неё хозяин:

public HashMap<Planet, Lord> addPlanetToLord(Planet planet, Lord lord) {
    if (!planetService.getPlanetList().contains(planet)) {
        System.out.println("Планета " + planet.getPlanetName() + " не существует!");
    } else if (lordAndPlanets.containsKey(planet)) {
        System.out.println("Планета " + planet.getPlanetName() + " уже принадлежит повелителю " + lord.getLordName());
    } else {
        lordAndPlanets.put(planet, lord);
        System.out.println("Планета " + planet.getPlanetName() + " передана повелителю " + lord.getLordName());
    }
    return lordAndPlanets;
}
→ Ссылка