Methoden Datumsvergleich schlaegt fehl

D

Datumnoob

Gast
Hallo liebes Forum!

Ich falle gleich mit der Tür ins Haus:

Java:
        HashMap<Date, String> strings = createHashMap();
        Date cd = new Date();

        if(strings.containsKey(cd)){
        	System.out.println("Datum: " + cd + "\n string: " + strings.get(cd));
        }
        else{
        	 System.out.println("fehler");
        }

Ich komme immer in den Fehlerzweig. Es existieren garantiert alle Datums. Was ich mir vorstellen könnte, dass beim Datumsvergleich bei der HashMap abfrage auch Millisekunden oder Ähnliches berücksichtigt werden, wobei es mir nur auf den Tag und den Monat drauf ankommt.

Ist das der Fehler? Wenn ja, gibt es eine elegante Methode das Problem zu lösen?

Zusatz: So wird die HashMap befüllt:

Java:
Calendar calendar = Calendar.getInstance();

for(int i = 1; i <=365; i++){
	    	    calendar.set(Calendar.DAY_OF_YEAR, i);
                    hm.put(calendar.getTime(), "STRING");
}
 
G

Gast2

Gast
Hallo liebes Forum!

Ich falle gleich mit der Tür ins Haus:
Java:
Was ich mir vorstellen könnte, dass beim Datumsvergleich bei der HashMap abfrage auch Millisekunden oder Ähnliches berücksichtigt werden, wobei es mir nur auf den Tag und den Monat drauf ankommt.[/QUOTE]
Deine Vermutung ist richtig ;)

[QUOTE="API"]The class Date represents a specific instant in time, [U][B]with millisecond precision[/B][/U]. [/QUOTE]
Also vergleiche manuell die Werte die dir wichtig sind.
 
D

Datumnoob

Gast
Alles klar danke! Mein Problem nur: Wie mache ich das am Besten, denn ich muss ja mit der HashMap vergleichen!

Wenn ich alle HashMap Einträge mit einer Schleife durchlaufe, dann verliert die HashMap doch ihren Vorteil. Irgendeinen eleganten Ratschlag?
 
G

Gast2

Gast
Du gehst mit ner Schleife über das keyset der hashmap und vergleichst jeden key mit deinem date.
 

Aldimann

Bekanntes Mitglied
Du gehst mit ner Schleife über das keyset der hashmap und vergleichst jeden key mit deinem date.

Eben das will er ja nicht.

@TO:

Da werden dann die Möglichkeiten rar! Eine Idee wäre das du die Daten eben nur mit dieser Genauigkeit rein gibst...

Evtl. erklärst du uns mal bissl mehr was du genau vor hast dann können wir dir evtl. andere Ideen aufzeigen ;)
 

Michael...

Top Contributor
Wenn ich alle HashMap Einträge mit einer Schleife durchlaufe, dann verliert die HashMap doch ihren Vorteil.
Was glaubst Du denn was die HashMap intern macht ;-) Der eigentliche Vorteil eine HashMap besteht in dem Schlüssel, der eindeutig sein muss.

Wenn man nicht selbst per Schleife suchen will, bleibt m.M. nur noch das Datum als String - entsprechend der Bedürfnisse - formatiert in der Map zu speichern. Und beim Prüfen per containsKey() einen ebenso formatierten Datumsstring zu übergeben.
 
D

Datumnoob

Gast
Problem gelöst. Habe einfach mit .clear() gelöscht und die aktuellen Werte die mich interessieren wieder gesetzt. Funktioniert einwandfrei. Danke Forum
 
D

Datumnoob

Gast
Ach ja und Michael. Die HashMap macht das Intern SICHER nicht! Sie heisst ja HASHMAP und nicht MAP.

Falls dir nicht bewusst ist was Hashing ist, informiere dich bevor du quatscht. Danke und tschüss liebes Forum!
 
G

Gast2

Gast
Ach ja und Michael. Die HashMap macht das Intern SICHER nicht! Sie heisst ja HASHMAP und nicht MAP.
Java:
  343       /**
  344        * Returns <tt>true</tt> if this map contains a mapping for the
  345        * specified key.
  346        *
  347        * @param   key   The key whose presence in this map is to be tested
  348        * @return <tt>true</tt> if this map contains a mapping for the specified
  349        * key.
  350        */
  351       public boolean containsKey(Object key) {
  352           return getEntry(key) != null;
  353       }
  354   
  355       /**
  356        * Returns the entry associated with the specified key in the
  357        * HashMap.  Returns null if the HashMap contains no mapping
  358        * for the key.
  359        */
  360       final Entry<K,V> getEntry(Object key) {
  361           int hash = (key == null) ? 0 : hash(key.hashCode());
  362           for (Entry<K,V> e = table[indexFor(hash, table.length)];
  363                e != null;
  364                e = e.next) {
  365               Object k;
  366               if (e.hash == hash &&
  367                   ((k = e.key) == key || (key != null && key.equals(k))))
  368                   return e;
  369           }
  370           return null;
  371       }
Man beachte die for-schleife ;)
Es ist anders auch einfach nicht zu lösen..

Danke und tschüss liebes Forum!
Tschüss!
 

Aldimann

Bekanntes Mitglied
Die Straße auf der wir das Thema hatten haben wir schon vor ein paar Posts verlassen ;)...

Die Lösung des TO lässt mich auch ein wenig Grübeln aber ok...

Ich schlage vor es einfach dabei zu belassen ;)
 

faetzminator

Gesperrter Benutzer
Ja, eine eigene Datenklasse wär echt... anständiger ;)
Eher so was würd ich machen:
Java:
public class ShortDate {

    public final int year;
    public final int month;
    public final int day;

    public ShortDate(Calendar cal) {
        this.year = cal.get(Calendar.YEAR);
        this.month = cal.get(Calendar.MONTH) + 1;
        this.day = cal.get(Calendar.DAY_OF_MONTH);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + day;
        result = prime * result + month;
        result = prime * result + year;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        ShortDate other = (ShortDate) obj;
        if (day != other.day)
            return false;
        if (month != other.month)
            return false;
        if (year != other.year)
            return false;
        return true;
    }   
    
    @Override
    public String toString() {
        return year + "-" + month + "-" + day;
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 ausführen im cmd schlägt fehl Java Basics - Anfänger-Themen 2
N Vergleich von Strings schlägt fehl.. Java Basics - Anfänger-Themen 5
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
T Input/Output String-Vergleich schlägt fehl Java Basics - Anfänger-Themen 7
M Erste Schritte if-Bedingung schlägt fehl Java Basics - Anfänger-Themen 4
chuxXo renamtTo schlägt fehl Java Basics - Anfänger-Themen 3
J Kompilieren von HelloWorld Beispiel schlägt fehl Java Basics - Anfänger-Themen 7
W Test, ob Datei existiert, schlägt fehl Java Basics - Anfänger-Themen 4
U Passwort verschlüsseln schlägt fehl Java Basics - Anfänger-Themen 3
R variable überschreiben schlägt fehl Java Basics - Anfänger-Themen 13
B Überprüfen von Strings schlägt fehl Java Basics - Anfänger-Themen 5
R Objekt deserialisierung schlägt fehl... Java Basics - Anfänger-Themen 2
Semox Datentypen Einlesen von char in Array schlägt unerwartet fehl Java Basics - Anfänger-Themen 4
G Object zu String schlägt fehl Java Basics - Anfänger-Themen 9
G Erstellen einer JAR-Datei mit Ant-Scrit schlägt fehl Java Basics - Anfänger-Themen 2
A Vergleich schlägt fehl Java Basics - Anfänger-Themen 15
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
E RegExpressions schlagen fehl. Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben