# Hashmap enthält immer nur den zuletzt zugeordneten Eintrag



## Java-Kämpfer (26. Mrz 2004)

Hallo,

hier seht Ihr einen Programm ausschnitt, welcher konfiguierbar viele Daten bekommt.
Als parameter wird immer ein Tagesdatum übergenen. Das Tagesdatum kann belibig oft übergeben werden. 
z.b.

Übergaben:

24.02.04
24.02.04
24.02.04
24.02.04
24.02.04
24.02.04
25.02.04
24.02.04
30.02.04

```
GregorianCalendar gregCal = new GregorianCalendar((logMessage.getLogTimestamp().getYear()+1900),
																		(logMessage.getLogTimestamp().getMonth()+1),
																(logMessage.getLogTimestamp().getDate()),0,0,0);
																
Integer füller = new Integer(0);						
Integer anzahl = new Integer(handler.getAnzLogZeilen());	
																				
								
						if((timeMapping.get(gregCal))==null){
							anzLogZeilen =0;
							handler.timeMapping.put(gregCal, füller);
						}
						if((handler.getFirstTime()).get(Calendar.HOUR_OF_DAY)==logMessage.getLogTimestamp().getHours()){
								handler.setAnzLogZeilen();
								handler.timeMapping.put(gregCal,anzahl);		
						}
```


des weiteren gibt es eine Methode 

```
public void setAnzLogZeilen(Handler handler) {
		handler.anzLogZeilen = handler.anzLogZeilen + 1;
	}
```
welche dann die InstanzVariable immer nur um 1 hochzählen soll
Wenn allerdings ein anderer Tag (Anderer Objekt key kommt)
muss anzLogZeilen wieder auf null gesetzt werden. Dann wird wieder von vorne gezählt wie oft der Tag übergeben wurde.
Die HashMap habe ich so deklariert:

```
private  Map timeMapping  = 	new HashMap();
```


Das Problem an der ganzen Sache ist das ich in der Hashmap immer nur den letzten Tag drin stehen habe den ich übergeben hab.
Warum???
Sieht jemand vielleicht den Fehler?


----------



## stev.glasow (26. Mrz 2004)

Du darfst immer nur einen Schlüssel (in deinem Fall gregCal) auch nur einmal pro Map benutzen :
map.put(x, 1);
map.put(y, 11);
map => {x:1, y:11}

map.put(x,88 )
map => {x:88, y:11}


----------



## Java-Kämpfer (29. Mrz 2004)

Ist es denn nicht so das put immer überprüft: 

Bin ich schon eingetragen und wenn ja überschrfeibe meinen Wert mit dem neu übergebenen??
Und wenn das nicht mit put geht gibt es da etwas anderes?


----------



## citizen_erased (29. Mrz 2004)

eine methode soll möglichst wenig auswirkungen haben, die aber dann auch gründlich. 
put kontrolliert also nicht, ob es den schlüssel schon gibt, sondern fügt einen eintrag ein (bzw. überschreibt einen anderen. es wird davon ausgegangen, dass put aufgerufen wird, um etwas einzufügen.
eine kontrolle musst du selber durchführen. dafür gibt es auch einen methode, die dir (nur) sagen kann, ob es einen bestimmten schlüssel schon gibt. (ich glaube, diese methode heisst contains(Object o))


----------



## Java-Kämpfer (29. Mrz 2004)

Hi, 

es kann nur mit put gehen. 
Ich muss das jeweils zugeordnete Value (von der Hashmap) doch verändern oder in meinem Fall hochzählen können. Und es gibt für HashMap keine andere  Methode die ein bestehenden Schlüssel Inhalt im nachhinein noch verändern könnte.  Oder ich bin blind..


----------



## citizen_erased (29. Mrz 2004)

dann musst du den wert mit get() auslesen, was auch immer du im eins erhöhen willst nun um eins erhöhen und den neuen wert mit put() und den gleichenschlüssel wieder einsetzen.


----------



## Java-Kämpfer (29. Mrz 2004)

Jooooo!
Ich Idiot
Danke! :autsch:


----------

