Avatar billede tandpine Nybegynder
05. juni 2004 - 18:20 Der er 13 kommentarer og
1 løsning

Liste med Hashtable

Hejsa

Jeg har en class Message:
public class Message {
    static int messageType;
    static String messageFrom;
    static long messageFromID;
    static String messageTo;
    static long messageToID;
    static String messageText;
   
    public Message(int type, String from, long fromID, String to, long toID, String text)
    {
        messageType = type;
        messageFrom = from;
        messageFromID = fromID;
        messageTo = to;
        messageToID = toID;
        messageText = text;
    }
    public String getMessageText()
    {
        return messageText;
    }
}

Nu vil jeg lave en liste af dem i en class Messages:
import java.util.*;

public class Messages {
    private Hashtable msgs;
    static long msgID;                            // keys for hashtable
           
    public Messages()
    {
        msgs = new Hashtable();
        msgID = 0;
    }
   
    public void putMessage(int type, String from, long fromID, String to, long toID, String text)
    {
        Message msg = new Message(type, from, fromID, to, toID, text);
        msgs.put(new Long(msgID++), msg);
    }
   
    public Message getMessage(long ID)
    {
        Message msg;
        msg =  (Message)msgs.get(new Long(ID));
        return msg;
    }

    public Enumeration elements()
    {
        return msgs.elements();
    }
}

Jeg har så prøvet at få en udskrift hvad der er i den:
import java.util.*;

public class TestMessage {

    public static void main(String[] args) {
        Messages messages = new Messages();
        Message aMsg;

        messages.putMessage(0, "mig", 0, "dig", 0, "Besked nr. 1");
        messages.putMessage(0, "mig", 0, "dig", 0, "Besked nr. 2");
        messages.putMessage(0, "mig", 0, "dig", 0, "Besked nr. 3");
        messages.putMessage(0, "mig", 0, "dig", 0, "Besked nr. 4");

       
        for(Enumeration e = messages.elements(); e.hasMoreElements();)
        {
            Message Msg = (Message)e.nextElement();
            System.out.println(Msg.getMessageText());
        }
    }
}
men jeg får udskrevet Besker nr. 4 4 gange.. istedet for en af hver.
hvad gør jeg galt.??

Hilsen
Tand
Avatar billede arne_v Ekspert
05. juni 2004 - 18:29 #1
Fjern static fra variablene i Message
Avatar billede arne_v Ekspert
05. juni 2004 - 18:30 #2
public class Message {
    int messageType;
    String messageFrom;
    long messageFromID;
    String messageTo;
    long messageToID;
    String messageText;
Avatar billede arne_v Ekspert
05. juni 2004 - 18:30 #3
static = delt mellem alle instanser af klassen
Avatar billede tandpine Nybegynder
05. juni 2004 - 18:33 #4
Dough.. ja selvfølgelig :) hehe kunne ikke forstå det..
takker mange gange..
Kan jeg ikke gøre så jeg får listen den "anden" vej.. nu kører den dem igennem baglæns ???
Avatar billede arne_v Ekspert
05. juni 2004 - 18:36 #5
En Hashtable er ikke så egnet til at hive dem ud i indsættelses rækkefølge.

Men du må kunne få den ud sorteret efter key.
Avatar billede arne_v Ekspert
05. juni 2004 - 18:38 #6
msgs.keySet().toArray() returnerer et array som kan sorteres og bruges til at hente med
Avatar billede tandpine Nybegynder
05. juni 2004 - 18:38 #7
okay.. .men så skal jeg bare sortere dem hver gang. det kommer til at ta lang tid når der er 1000 messages f.eks  ??
er der en anden type der er bedre
Avatar billede arne_v Ekspert
05. juni 2004 - 18:42 #8
Umiddelbart lyder det som at en ArrayList eller Vector ville passe bedre til
dit behov.
Avatar billede tandpine Nybegynder
05. juni 2004 - 18:45 #9
okay.. jeg takker mange gange .. prøver at rode lidt med det så :)
Avatar billede arne_v Ekspert
05. juni 2004 - 18:47 #10
Det er ret simpelt.

list.add(o);

tilføjer et objekt til listen.

list.size()

returnerer antal objekter i listen.

list.get(i)

henter element nummer i i listen.
Avatar billede tandpine Nybegynder
05. juni 2004 - 18:59 #11
brugte nu vector istedet.. men det virker også med den :)
Avatar billede arne_v Ekspert
05. juni 2004 - 19:44 #12
Vector og ArrayList er stort set det samme.
Avatar billede martinbk Nybegynder
06. juni 2004 - 07:45 #13
forskellen ligger vel primært i Vector er thread safe, ArrayList er ikke.
eller i den interne håndtering af det Array som holder styr på elementerne, så vidt jeg husker udvider ArrayList med 50 % hvis den løber tør for plads, hvorimod Vector fordobler, på en Vector har du også muglighed for at sætte det antal pladser der skal udvides med.
Avatar billede arne_v Ekspert
06. juni 2004 - 10:26 #14
Lidt overordnet er ArrayList andet forsøg, mens Vectpr var første forsøg.

Det er rigtigt at metoderne i Vector er thread safe, men det spiller sjældent
den store rolle, da brug af Vector alligevel sjældent er thread safe uden brug
af yderligere synkronisering.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester