Hashtable/Vector - immer nur letzter Eintrag vorhanden

  • Themenstarter drschwalbenmann
  • Beginndatum
Status
Nicht offen für weitere Antworten.
D

drschwalbenmann

Gast
Hallo.

Ich habe ein wenig mit NetBeans für mein Sony-Ericsson herum experimentiert. Ich lese zur Laufzeit eine CSV Datei ein und schreibe sie in eine Hashtable. Später möchte ich dann auf Einträge der Hashtable zugreifen.
Das Einlesen funktioniert auch soweit ohne Fehler, aber beim Suchen nach Einträgen sind immer alle Einträge bis auf den letzten verschwunden. Die size zeigt aber die korrekte Größe an. Im Emulator funktioniert alles aber wie es soll...
Aus Frust bin ich auf einen Vector umgeschwenkt, aber auch hier genau das selbe...

Hat irgendwer eine Ahung was ich falsch mache?

Gruß, Andreas
 
S

SlaterB

Gast
was verstehst du denn unter 'Suchen'?
das hängt doch stark von der Art der enthaltenen Objekte under der Keys (bei der Map) ab, von den Inhalt der equals-Methoden, hashCode() usw,
poste komplette Beispielprogramme
 
D

drschwalbenmann

Gast
Mit "Suchen" meinte ich get().

Hier mal die Variante mit Hashtable...
Code:
    Hashtable test = new Hashtable();
    Calendar temp = Calendar.getInstance();
    int i = 0;

    temp.set(Calendar.HOUR_OF_DAY, 0);
    temp.set(Calendar.MINUTE, 0);
    temp.set(Calendar.SECOND, 0);
    temp.set(Calendar.MILLISECOND, 0);

    for(i = 1; i < 2; i++) {
        temp.set(Calendar.DATE, i);
        temp.set(Calendar.MONTH, 0);
        temp.set(Calendar.YEAR, 2009);
        test.put(temp.getTime(), i);
    }

    System.out.println(test.get(dateField.getDate())); // dateField = 01.01.2009
    ...
    System.out.println(test.get(dateField.getDate())); // dateField = 02.01.2009

    System.out.println(test.containsKey(dateField.getDate())); // dateField = 01.01.2009
    ...
    System.out.println(test.containsKey(dateField.getDate())); // dateField = 02.01.2009

    System.out.println(test.size());

Der Output:
Code:
null
2
false
true
2
 
S

SlaterB

Gast
kann nicht sein, die Schleife
> for(i = 1; i < 2; i++) {
fügt ja nur ein Element hinzu ;)

jedenfalls ist dein Programm nicht vollständig und daher ohne Aussage,
bei mir gehts:

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {

        Hashtable test = new Hashtable();
        Calendar temp = Calendar.getInstance();
        int i = 0;

        temp.set(Calendar.HOUR_OF_DAY, 0);
        temp.set(Calendar.MINUTE, 0);
        temp.set(Calendar.SECOND, 0);
        temp.set(Calendar.MILLISECOND, 0);

        for (i = 1; i <= 2; i++)
        {
            temp.set(Calendar.DATE, i);
            temp.set(Calendar.MONTH, 0);
            temp.set(Calendar.YEAR, 2009);
            test.put(temp.getTime(), i);
        }

        Date date = new Date(109, 0, 1);
        System.out.println(test.get(date));
        System.out.println(test.containsKey(date));
        date = new Date(109, 0, 2);
        System.out.println(test.get(date));
        System.out.println(test.containsKey(date));

        System.out.println(test.size());

    }
}

-------

1
true
2
true
2
 
D

drschwalbenmann

Gast
Also in dem Emulator von NetBeans gehts bei mir auch - auf dem Handy aber nicht...
 
S

SlaterB

Gast
meinst du mein Programm oder deins?

falls du ein konkretes vollständiges Programm zusammengestellt hat, kann man das ja um weitere Ausgaben erweitern,
z.B. an beiden Stellen (beim Einfügen und Auslesen) den HashCode loggen, falls das auf deinem Handy möglich ist

vielleicht verwendest du unterschiedliche Klassen oder Calendar.getInstance(); hat ne andere Zeitzone als deine andere Datumsquelle oder oder..
 
D

drschwalbenmann

Gast
Möglich das mein Quelltext so nicht funktioniert, war ja nur ein Beispiel, aber davon mal abgesehen gibt es deine Date(109, 0, 1)-Initialisierung bei meinem J2ME nicht. Im kompletten Java vllt aber nicht im J2ME.

Wie dem auch sei, ich hab das Problem gefunden.
Scheinbar macht mein Handy bei
Code:
test.put(temp.getTime(), i);
einfach ne Referenz auf temp, weil beim nächsten Schleifendurchlauf ist das Element auf einmal auch der 02.01.2009. Der Emulator macht aber wirklich eine Kopie und erstellt einen neuen Speicherbereich dafür, verrückt.

Ich hab das jetzt einfach so abgewandelt:
Code:
test.put(new Date(temp.getTime().getTime()), i);
Und damit funktionierts.

Vielen Dank, Andreas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Array oder Vector Android & Cross-Platform Mobile Apps 4
ruutaiokwu Android Warum muss man bei Android Studio immer 2x auf "Run" klicken damit die App auf dem Gerät startet Android & Cross-Platform Mobile Apps 8
W Android Browser startet immer, bevor die Daten dafür geholt wurden Android & Cross-Platform Mobile Apps 15
C SQLite Datenbank in Kotlin - App stürtzt immer ab Android & Cross-Platform Mobile Apps 0
TheWhiteShadow Android Class.getResource immer null Android & Cross-Platform Mobile Apps 6
R Android incomingNumber bein Eingehenden Anruf immer leerer String Android & Cross-Platform Mobile Apps 4
N Android tabhost: immer nur tab1 sichtbar Android & Cross-Platform Mobile Apps 4
K Zeitstopp-App, immer dann aktiv, wenn Handy an - wie vorgehen? Android & Cross-Platform Mobile Apps 4
N Android bei textview.settext immer abbruch Android & Cross-Platform Mobile Apps 4
N Textview macht immer nach einem Beistrich einen Abstand Android & Cross-Platform Mobile Apps 6
X AVD stüzt immer ab Android & Cross-Platform Mobile Apps 6
D Java ME Mehrere Random´s geben immer die gleiche Zahl zurück Android & Cross-Platform Mobile Apps 7
Kidao InputStream.available() liefer immer nur 0 Android & Cross-Platform Mobile Apps 8
G Randomgenerator liefert immer wieder die selben Zahlen Android & Cross-Platform Mobile Apps 16

Ähnliche Java Themen

Neue Themen


Oben