Avatar billede tlunde Nybegynder
17. juli 2003 - 11:56 Der er 14 kommentarer og
1 løsning

LinkedList i Java

Hej,
Jeg skal til at lave et projekt i Java, og jeg ved at jeg skal bruge LinkedList, men mit problem er hvordan jeg helt præcist skal anvende det...

Opgaven går ud på, at jeg skal lave et kartotekssystem, hvor man kan indtaste enkeltpersoners samlinger, feks. cd'er, film, osv.

Mit problem er så:
Skal jeg bare bruge en LinkedList til at holde styr på ALT, eller skal det deles op, så flere LinkedLists holder styr på forskellige ting?

Jeg havde forestillet mig at lave en LinkedList, som indholdte objekter, hvor et objekt er en person og hele hans samling, men er det en dårlig ide at gøre det på den måde?
Avatar billede tlunde Nybegynder
17. juli 2003 - 12:01 #1
Vi er endnu ikke gået igang med selve programmeringen af programmet, men vi ville først få dannet et overblik over hvordan datastrukturen skulle se ud, da den jo er rimelig vigtig for om det bliver et godt eller dårligt program...

Hvis I er i tvivl om opgaven, kan i læse om den her:
http://www.cs.auc.dk/~madsen/Homepage/Teaching/MIP-RE_E02/opgaven.html
Avatar billede conrad Nybegynder
17. juli 2003 - 12:18 #2
Det kommer lidt an på hvad du gerne vil kunne søge på:

hvis der skal være flere personer ville jeg nok bruge en hash tabel til denne, hvor navnet er key. Så er det nemt at finde en persons cd'er.

Du kan også lave en hashtabel til cd'er og igen bruge navn som key.

Jeg ville ikke lade Person og CD samling være et object, ´måske snarere lade CD samling være en attribut hos person
Avatar billede arne_v Ekspert
17. juli 2003 - 12:33 #3
Du skal ikke bruge LinkedList til kartoteks opgaver.

LinkedList skal du bruge til opgaver hvor du skal have en first
og en last. Typisk en kø.

Til kartoteks opgaver kan du bruge ArrayList hvis du bare vil
kunne slå op på nummer eller HashMap hvis du vil slå op på
key.

Bemærk at det er muligt at kombinere d.v.s. at gemme de samme
objekter både en en ArrayList og i to forskellige HashMap's
med forskellge keys.Man gemem rnemlig kun referancer til objekterne
ikke en kopi !

her et et eksempel som bruger begge. Et antal køer identifieceret ved navn:

import java.util.*;

public class Queue {
    private LinkedList q = null;
    public Queue() {
        q = new LinkedList();
    }
    public void enq(Object o) {
        q.addLast(o);
    }
    public Object deq() {
        return q.removeFirst();
    }
}

import java.util.*;

public class QueueManager {
    private HashMap allq = null;
    public QueueManager() {
        allq = new HashMap();
    }
    private Queue getQ(String name) {
        if(allq.containsKey(name)) {
            return (Queue)allq.get(name);
        } else {
            Queue q = new Queue();
            allq.put(name, q);
            return q;
        }
    }
    public void enq(String name, Object o) {
        getQ(name).enq(o);
    }
    public Object deq(String name) {
        return getQ(name).deq();
    }
}
Avatar billede tlunde Nybegynder
17. juli 2003 - 12:59 #4
Har i læst den opgaveformulering vi har fået udleveret. Vi er nemlig lidt i tvivl om vi skal bruge linkedlist eller hashtabel, nok mere fordi vi ikke ved hvordan en hashtabel skal opbygges.
Avatar billede arne_v Ekspert
17. juli 2003 - 13:08 #5
Der står ikke LinkedList - der står Collection.

LinkedList er gabske vist en Collection men det er ArrayList også og jeg
kan altså ikke se hvad I skulle bruge LinkedList' specielle features til.

ArrayList hvis tingene skal organiseres efter rækkefølge.

HashMap hvis de skal slåes op på navn.

(HashMap og Hashtable er ca. det det samme).
Avatar billede arne_v Ekspert
17. juli 2003 - 13:10 #6
Og HashMap (eller Hashtable) er meget simple at bruge:

Hvis i et sted i programmet gemmer et objekt under et navn så kan I et
andet sted i programmet finde det frem under det navn.

Map m = new HashMap();
...
Foobar x = new Foobar();
m.put("godx", x);
...
Foobar x = (Foobar)m.get("godx");
Avatar billede tlunde Nybegynder
17. juli 2003 - 13:15 #7
hvad er en foobar?

og hvad sker der når du skriver
m.put("godx", x);
Avatar billede arne_v Ekspert
17. juli 2003 - 13:22 #8
Foobar er bare et tilfældigt navn på en klasse.

Du skal jo have lavet et antal klasser til at beskrive de forskellige
typer ag objekter.

m.put("godx", x)

gemmer objektet x i mappen under navnet "godx" således at man senere
kan finde det samme objekt med:

m.get("godx")
Avatar billede arne_v Ekspert
17. juli 2003 - 13:23 #9
Du kan bruge enhver type objekt som key, men String er nok
rimeligt almindeligt.
Avatar billede tlunde Nybegynder
17. juli 2003 - 13:36 #10
Vil det så sige at godx er navnet på den key, der refererer til vores hashtabel eller hedder keyen m?

Hvordan gemmer man så f.eks. 3 forskellige cd'er under en bruger.
Avatar billede arne_v Ekspert
17. juli 2003 - 14:00 #11
m er mappen

"godx" er keyen som objektet x er gemt under
Avatar billede arne_v Ekspert
17. juli 2003 - 14:05 #12
Det kan laves på mange mange forskellige måder.

En af dem er:
  en Map med navn som key og Person som objekt
  Person indeholder så en ny Map med titel som key og CD som objekt
Avatar billede arne_v Ekspert
17. juli 2003 - 14:05 #13
En "rigtig OO opgave".
Avatar billede tobiashm Nybegynder
18. juli 2003 - 10:49 #14
Ang. Foobar som navn for klasser/variable/etc. i programmering:

http://info.astrian.net/jargon/terms/f/foobar.html
Avatar billede tlunde Nybegynder
21. juli 2003 - 21:09 #15
Takker for hjælpen indtil videre...
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