Biesterfeld: HashMap verliert plötzlich alle Werte?

Beitrag lesen

Hej,

ich habe ein ganz seltsames Problem. In einer HashMap sind alle Daten zuerst vorhanden. Dann übergebe ich diese HashMap-Referenz an eine Methode. In dieser Methode werden die Werte plötzlich irgendwie vernichtet. Die Schlüssel sind noch vorhanden. Wie kann so etwas möglich sein?

Was sagt der Debugger? Sind die Schlüssel noch alle da? Sind die Schlüssel auch weg? Sind die values auf null gesetzt? Ändert sich an der kritischen Stelle eventuell der HashCode der keys? Der der values?

Es ist ganz wichtig, dass Elemente in einer HashMap nicht verändert werden. Wenn sie verändert werden _und_ das führt dazu dass sich der hashCode ändert dann wars das. Die Elemente liegen dann zwar noch in der Map können aber nicht mehr gefunden werden. Aber das wusstest du wahrscheinlich bereits nach Lesen der entsprechenden Lektüre.

Und: Du zeigst nicht was mit deinen Strings passiert. Diese sind zwar immutable, aber es gibt Hacks die das umgehen.

Also, entweder mal den Debugger anwerfen und schaun was passiert, oder die Map z.B. in einer Collections.unmodifieableMap() kapseln und schaun ob ne Exception geworfen wird.

Noch kurz was zu deinem Code:

  

>  public void fillTableModelWithData(HashMap<String, String> data)   {

Muss der Übergabewert eine HashMap sein? Map reicht nicht? Wenn es egal ist, sollten immer Typen von Interfaces verwendet werden.

  

>   for (String element : data.keySet())   {  
>       System.out.println("Im Tablemodel: " + element + "," + data.get(element));  
>   }

Das _kann_ unnötig unperformant sein, besser ist:

  
  for (Map.Entry<String, String> me : data.entrySet())   {  
      System.out.println("Im Tablemodel: " + me.getKey() + "," + me.getValue());  
  }

Beste Grüße
Biesterfeld

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz