[HashMap] Warum wird mein Value überschrieben?


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Buba235

Erfahrenes Mitglied
#1
Hallo Leute,

ich habe eine Frage an euch. Vielleicht steh ich nur auf dem Schlauch und ihr könnt mir schnell helfen, aber immer wenn ich einen neuen Datensatz in meiner HashMap speichere, wird jeder value mit dem neuesten ersetzt. hier mal mein Aufbau: Ich habe eine Klasse "User", die einfach nur ein paar Felder mit gettern und settern hat.
Java:
public class User {
    private int id;
    private String name;
    private String email;
    
    public int getId() {
        return id;
    }
    // weitere getter und setter
}
Dazu habe ich eine weitere Klasse, die eine HashMap mit dem User Objekt abfüllen soll:
Java:
public class UserDaoImpl implements UserDao {
    private Map<Integer, User> myMap = new HashMap<>();
    
    @Override
    public void create(User user) {
        myMap.put(user.getId(), user);
    }

    @Override
    public User read(int id) {
        return myMap.get(id);
    }
}
Soweit der Aufbau. Jetzt will ich in meiner TestKlasse das Befüllen eben jener Map testen. Das Problem ist, dass immer der Value der Map mit dem letzten Datensatz überschrieben wird und ich nicht verstehe warum das so ist. hier die Testklasse:
Java:
public class UserDaoImplTest {

    @Test
    public void createShouldCreateAUser() {
        UserDao dao = new UserDaoImpl();
        User user = new User();
        
        user.setId(1);
        user.setName("Hans");
        user.setEmail("hans@mail.com");
        dao.create(user);
        
        user.setId(2);
        user.setName("Hintz");
        user.setEmail("hintz@mail.com");
        dao.create(user);
        
        user.setId(3);
        user.setName("Kuntz");
        user.setEmail("kuntz@mail.com");
        dao.create(user);
        
        User result = dao.read(1);
        assertNotNull(result);
        assertEquals("Hans", result.getName());
        assertEquals("hans@mail.com", result.getEmail());
    }
}
Nach dem letzten Aufruf von create sieht meine Map also so aus: Key=1 / Value=(id=1, name=Kuntz, email=kuntz@mail.com). Oder anders gesagt. alle Values haben diesen Inhalt, obwohl die keys ja unterschiedlich sind. Könnt ihr mir da helfen? Was genau ist da mein Problem, was übersehe ich?

Danke schon mal.
 

Buba235

Erfahrenes Mitglied
#3
Hallo HonniCilest,

danke für deine Antwort. Nach einer Nacht drüber schlafen und zusammen mit deiner Antwort ist es eigentlich Glockenklar. Manchmal ist man einfach etwas daneben. Danke!
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…