Avatar billede a-torsten Nybegynder
12. maj 2003 - 11:04 Der er 4 kommentarer og
2 løsninger

Hashtable sortere efter ?

Hvad sortere en Hashtable efter når man ligger key/værdi deri..??


Ud fra disse 2 klasser kan jeg ikk se logikken... 

------------------------------------------
import java.util.*;

public class Spillere
{
    private Hashtable spillere;

    public Spillere()
    {
        spillere = new Hashtable();
    }
   
    public void tilfoejSpiller(String navn)
    {
        if(!spillere.containsKey(navn))
        spillere.put(navn,new Integer(0));
    }
   
    public void fjernSpiller(String navn)
    {
        if(spillere.containsKey(navn))
        spillere.remove(navn);
    }
   
    public void opdaterPoint(String navn, int point)
    {
        if (spillere.containsKey(navn))
        {
        int nyPoint = Integer.parseInt(spillere.get(navn).toString()) + point;
        spillere.put(navn,new Integer(nyPoint));
        }
    }
   
    public Hashtable hentSpillere()
    {
        return spillere;
    }
   
    public String visSpilstyre()
    {
        Enumeration e = spillere.keys();
        Object a = e.nextElement();
        return a.toString();
    }
   
    public int antalSpillere()
    {
        int antal = 0;
            Enumeration e = spillere.keys();
        while( e.hasMoreElements()  )
        {
        Object a = e.nextElement();
        antal++;
        }
        return antal;
    }
}
----------------------------------------------

import java.util.*;

public class Main
{
    private static Spillere sp;
   
    private static Hashtable tmpSp;
   
    private static String spillerListe;

    public static void main(String args[])
    {
        sp = new Spillere();
       
        sp.tilfoejSpiller("Anne");
        sp.tilfoejSpiller("Anders");
        sp.tilfoejSpiller("Jens");
        sp.tilfoejSpiller("Bjørn");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.fjernSpiller("Anne");       

        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.tilfoejSpiller("Anne");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.fjernSpiller("Anne");       

        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.tilfoejSpiller("Annn");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
           

        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.tilfoejSpiller("Anne");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
        sp.tilfoejSpiller("Anna");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
                       
        sp.tilfoejSpiller("Aage");
       
        System.out.println(sp.hentSpillere());
        System.out.println(sp.visSpilstyre());
       
    }
}

-Anders
Avatar billede arne_v Ekspert
12. maj 2003 - 11:05 #1
Den sorterer formentlig efter hash, som ikke har nogen relation til
alfabetisk sortering.

Hvis du vil have dem ud sorteret kan du sortere eksplicit.
Avatar billede arne_v Ekspert
12. maj 2003 - 11:07 #2
Eksempel på det sidste:

import java.util.Arrays;
import java.util.Hashtable;

public class HashtableSort {
    public static void main(String[] args) {
        Hashtable hm = new Hashtable();
        hm.put("c","3");
        hm.put("b","2");
        hm.put("a","1");
        System.out.println(hm);
        Object[] sa = hm.keySet().toArray();
        Arrays.sort(sa);
        for(int i = 0; i < sa.length; i++) {
            String key = (String)sa[i];
            String value = (String)hm.get(key);
            System.out.println(key + "->" + value);
        }
       
    }
}
Avatar billede jakoba Nybegynder
12. maj 2003 - 11:09 #3
Det giver ikke rigtig mening at 'ordne' en hashtabel i sorteret rækkefølge. fordelen med hashing er jo netop at det er en meget 'flad' algoritme der benyttes til søgning og indsætning, Vi har ikke det 'ordnede' træ man benytter i hierakiske lagestrukturer.

mvh JakobA
Avatar billede arne_v Ekspert
12. maj 2003 - 11:10 #4
Hvis du tit skal have dem ud sorteret så kan du overveje at skifte fra
Hashtable til en anden struktur f.eks. TreeMap.
Avatar billede disky Nybegynder
12. maj 2003 - 11:10 #5
En hashtable er ikke sorteret, det er ligesom hele fidusen ved den.

Værdier i en hashtable bliver gemt ud fra en hashkey, dette sikre en tidskompleksitet på O(1) hvor en sorteret liste er langsommere.

Du skal explicit sorterer tingene i hånden hvis du vil havde dem ud sorteret.
Avatar billede arne_v Ekspert
12. maj 2003 - 11:11 #6
Som Jakob korrekt siger: Hashtable er optimeret efter
hurtig indsæt og opslag - ikke efter sortering.
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