Avatar billede jdavid Nybegynder
08. maj 2003 - 12:02 Der er 14 kommentarer og
1 løsning

Linked list ?

Jeg skal gemme Kundenummer, Gade, Nr, rutenr og aflev.nr. Hvilken ADT vil være bedst ? Jeg mener en linked list. Jeg giver 200 point til en brugbar linked list, da jeg er lidt på bar bund, og det er til en opgave :o)
Avatar billede soreno Praktikant
08. maj 2003 - 12:04 #1
Start med at kigge i java.util pakken - der findes en linkedlist.
LinkedList list = new LinkedList();
Kunde k1 = new Kunde(kundenr, gade, nr, rutenr, aflnr);
list.add(k1);
Avatar billede arne_v Ekspert
08. maj 2003 - 12:05 #2
Jeg ville bruge en HashMap og gemme data objekter med kundenummer som key.

Det må give nemmest brug.

LinkedList er implementeret i java.util.LinkedList så den får du gratis.
Avatar billede soreno Praktikant
08. maj 2003 - 12:07 #3
Men hvorfor lige en liste ?
Hvis kundenr er unikt (det er det vel :-) så kan du benytte en hashmap.

HashMap map = new HashMap();
map.put(new Integer(kundenr), k1);

Så kan du hente objektet k1 igen med:
Kunde k2 = (Kunde)map.get(kundenr);
Avatar billede soreno Praktikant
08. maj 2003 - 12:10 #4
Med en HashMap har put/get metoden en tidskompleksitet på O(1)
En LinkedList har O(1) hvis der hentes fra start eller slut af liste.
Hvis der skal søges på et specifikt objekt i en LinkedListe er tidskompleksiteten O(n).
Avatar billede disky Nybegynder
08. maj 2003 - 12:10 #5
Brug en Map istedet det giver mere mening og bedre performance.
Avatar billede disky Nybegynder
08. maj 2003 - 12:11 #6
jdavid:
Du kan med fordel kigge lidt i API'en Java indeholder mange smarte klasser i forvejen, ingen grund til at lave dem selv.
Avatar billede soreno Praktikant
08. maj 2003 - 12:12 #7
..med mindre det er for at lære noget :-)
Avatar billede disky Nybegynder
08. maj 2003 - 12:15 #8
Man lærer ikke noget ved at lade andre lave det :)
Avatar billede arne_v Ekspert
08. maj 2003 - 12:16 #9
Eksempel:

package kartotek;

public class Kunde {
    private String kundenr;
    private String gade;
    private String nr;
    private String rutenr;
    private String aflevnr;

    public Kunde(String kundenr, String gade,  String nr, String aflevnr, String rutenr) {
        this.aflevnr = aflevnr;
        this.gade = gade;
        this.kundenr = kundenr;
        this.nr = nr;
        this.rutenr = rutenr;
    }



    public String getAflevnr() {
        return aflevnr;
    }
    public String getGade() {
        return gade;
    }
    public String getKundenr() {
        return kundenr;
    }
    public String getNr() {
        return nr;
    }
    public String getRutenr() {
        return rutenr;
    }
    public void setAflevnr(String aflevnr) {
        this.aflevnr = aflevnr;
    }
    public void setGade(String gade) {
        this.gade = gade;
    }
    public void setKundenr(String kundenr) {
        this.kundenr = kundenr;
    }
    public void setNr(String nr) {
        this.nr = nr;
    }
    public void setRutenr(String rutenr) {
        this.rutenr = rutenr;
    }

    public String toString() {
        return "[" + kundenr + ": " + gade + " " + nr + "]";
    }
}


package kartotek;

import java.util.*;

public class Kartotek {
    private HashMap data;
    public Kartotek() {
        data = new HashMap();
    }
    public void add(Kunde kunde) {
        data.put(kunde.getKundenr(), kunde);
    }
    public Kunde find(String kundenr) {
        return (Kunde)data.get(kundenr);
    }
}


package kartotek;

public class Demo {

    public static void main(String[] args) {
        Kartotek k = new Kartotek();
        k.add(new Kunde("1", "Storegade", "11", "R1", "A1"));
        k.add(new Kunde("2", "Lillegade", "22", "R2", "A2"));
        System.out.println(k.find("1"));
    }
}
Avatar billede arne_v Ekspert
08. maj 2003 - 12:17 #10
Det skulle gerne give dig en ide om hvordan HashMap kan bruges.
Avatar billede soreno Praktikant
08. maj 2003 - 12:18 #11
Det kan man da godt. Hvis man er på bar bund så er det da genialt at man kan kigge hvordan andre har gjort - det er jo mere eller mindre sådan man lærer nyt stof :-)
Avatar billede jdavid Nybegynder
08. maj 2003 - 12:18 #12
Det er noget jeg *\burde*\ have lært, men nu skal jeg bare bruge den liste. Men det gik stærkt med at få en hulens masse svar. Jeg vender tilbage med points når jeg har kigget det igennem, over middag
Avatar billede jdavid Nybegynder
08. maj 2003 - 13:01 #13
Tak for hjælpen allesammen. Det viser sig at jeg har lært en hel del mere end man lige skulle tro. Som jeg skrev i toppen, giver jeg points til brugbar kode, så det bliver Arne V der scorer points. Håber det er okay med Jer andre !
Avatar billede jdavid Nybegynder
11. maj 2003 - 07:57 #14
Arne_V > Hvilken sorteringsalgoritme ville du anbefale til din kode ?
Avatar billede arne_v Ekspert
11. maj 2003 - 09:23 #15
Den indbyggede !

Lille eksempel på sortering af HashMap:

import java.util.Arrays;
import java.util.HashMap;

public class HashMapSort {
    public static void main(String[] args) {
        HashMap hm = new HashMap();
        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);
        }
     
    }
}

Klassen Kartotek kunne så have en metode:

public Object[] allSorted() {
        Object[] sa = hm.keySet().toArray();
        Arrays.sort(sa);
        return sa;
}
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