Avatar billede martinm Nybegynder
31. december 2002 - 15:33 Der er 33 kommentarer og
2 løsninger

TreeSet()

Godt nytår.

Jeg sidder og bakser med TreeSet og mangler en klasse, som kan indkapsle denne og samtidig udføre en række operationer på dette TreeSet. Her tænkes på, clear, add remove.
Avatar billede erikjacobsen Ekspert
31. december 2002 - 15:34 #1
Hvad har du lavet?
Avatar billede magoo20000 Nybegynder
31. december 2002 - 15:36 #2
Følgende klasse indkapsler et TreeSet og kan benyttes til at udføre en række metoder på det!

import javax.swing.*;
import java.util.*;

public class SortedListModel extends AbstractListModel{

  SortedSet model;

  public SortedListModel() {
    model = new TreeSet();
  }

  public int getSize() {
    return model.size();
  }

  public Object getElementAt(int index) {
    return model.toArray()[index];
  }

  public void add(Object element) {
    if (model.add(element)) {
      fireContentsChanged(this, 0, getSize());
    }
  }

  public void addAll(Object elements[]) {
    Collection c = Arrays.asList(elements);
    model.addAll(c);
    fireContentsChanged(this, 0, getSize());
  }

  public void clear() {
    model.clear();
    fireContentsChanged(this, 0, getSize());
  }

  public boolean contains(Object element) {
    return model.contains(element);
  }

  public Object firstElement() {
    return model.first();
  }

  public Iterator iterator() {
    return model.iterator();
  }

  public Object lastElement() {
    return model.last();
  }

  public boolean removeElement(Object element) {
    boolean removed = model.remove(element);
    if (removed) {
      fireContentsChanged(this, 0, getSize());
    }
    return removed; 
  }
}
Avatar billede magoo20000 Nybegynder
31. december 2002 - 15:38 #3
For din egen skyld skal du overbevise dig selv om, at du forstår denne kode (samt teorien bag den) og læs på www.javasoft.com om emnet.
Jeg ved ikke om du kan bruge dette, men det var hvad jeg lige havde liggende og jeg skal til og afsted til nytårs tamtam. Godt nytår!
Avatar billede arne_v Ekspert
31. december 2002 - 15:39 #4
martinm>

Hvad vil du opnå med den indkapsling ?

Det er nemt nok at indkapsle, men for at gøre det rigtigt var det
rart at vide hvorfor !  (der er ikke meget pointe i at lave
en indkapsling som kun ændrer metode-navnene)
Avatar billede martinm Nybegynder
31. december 2002 - 15:53 #5
Ja
Avatar billede martinm Nybegynder
31. december 2002 - 15:54 #6
Hov! Det er en del af en skoleopgave, så det er et krav fra lærerens side - det kan jeg desværre ikke gøre noget ved! Magoos kodestump løser egentlig min problemstilling - jeg er ikke så hård til java! Evt. nogen der har ref. til teori omkring stoffet(bøger/web)?
Avatar billede arne_v Ekspert
31. december 2002 - 15:57 #7
Teori omkring hvad ? Indkapsling ?
Avatar billede arne_v Ekspert
31. december 2002 - 15:59 #8
Magoo's klasse indeholder 2 "features":
  - et par ekstra praktiske metoder til at accesse TreeSet'et
  - samt halvdelen af et observer pattern

Men er det det du skal bruge ?
Avatar billede martinm Nybegynder
31. december 2002 - 16:00 #9
Omkring TreeSet, SortedSets, Træer, Kædet lister! Det er der jeg føler jeg har et hul:(
Avatar billede martinm Nybegynder
31. december 2002 - 16:01 #10
Ok..Det med observer pattern er jeg ikke helt med på, men 8 af metoderne kan jeg bruge.
Avatar billede martinm Nybegynder
31. december 2002 - 16:03 #11
Er det pattern ikke noget med at notificere andre om ændringer. Hvor kan du se det i koden (at det er ca. ½-delen)?
Avatar billede arne_v Ekspert
31. december 2002 - 16:04 #12
Han kalder fireContentsChanged men jeg kan ikke se dendefineret nogen steder !
Avatar billede arne_v Ekspert
31. december 2002 - 16:08 #13
Du kan opdele metoderne i :

getSize er bare en wrapper omkring size
getElementAt er ny funktionalitet
add tilføjer trigger for ændring
addAll er ny funktionalitet
clear tilføjer trigger for ændring
contains er bare en wrapper for contains
firstElement er bare en wrapper for first
iterator er bare en wrapper for iterator
lastElement er bare en wrapper for last
remove tilføjer trigger for ændring
Avatar billede martinm Nybegynder
31. december 2002 - 16:10 #14
Er den metode ikke fra Swing-pakken?
Avatar billede arne_v Ekspert
31. december 2002 - 16:12 #15
Ah. Det en den. Og det er derfor han extender AbstractListModel.
Avatar billede arne_v Ekspert
31. december 2002 - 16:12 #16
Men skal du bruge det i Swing sammenhæng ?
Avatar billede martinm Nybegynder
31. december 2002 - 16:13 #17
Hmm... Ja det kan jeg godt se nu du siger det. Det er egentlig bare wrapper-metoder samt getElementAt, addAll jeg behøver - måske er 150 lige i overkanten:-)
arne_v >> Hvordan skal følgende forståes:

public SortedListModel() {
  SortedSet model = new TreeSet();
}

SortedSet er jo et interface
Avatar billede arne_v Ekspert
31. december 2002 - 16:16 #18
Ja.

Det er meget anvendt hvis klasse X implementerer interface Y
at skrive:

Y navn = new X();
Avatar billede arne_v Ekspert
31. december 2002 - 16:17 #19
Pointen er at det sikrer at man kun bruger metoder fra
interfacet Y i resten af koden.

Og så kan man senere ændre den liste til:

Y navn = new Z();

hvor klassen Z også implementerer interface Y og være sikker
på at det stadig compiler.
Avatar billede arne_v Ekspert
31. december 2002 - 16:18 #20
De 2 ekstra metoder er meget praktiske.

Og du kan sagtens fjerne:

import javax.swing.*;

extends AbstractListModel

alle fireContentsChanged kaldene

hvis du vil bruge det i en anden sammenhæng end Swing.
Avatar billede arne_v Ekspert
31. december 2002 - 16:20 #21
Og du kan tilføje dine egen metoder, hvis der er en eller
anden ekstra funktionalitet du skal bruge.
Avatar billede martinm Nybegynder
31. december 2002 - 16:20 #22
Ahh! Smart! Du er dygtig må jeg sige.. Der lærte jeg noget (væsentligt) føler jeg!
Og ja, jeg skal senere hen benytte noget swing i denne sammenhæng - en udbygning af opgaven skal afleveres med dette medio januar.

Havde du nogle ref. til litteratur?
Avatar billede arne_v Ekspert
31. december 2002 - 16:22 #23
Grunden til at Swing bruger den opdatering er at dataene skal
vises på skærmen og så er det ret hensigtsmæssigt at Swing
opdaterer skærmbilledet når man ændrer i data.

Jeg prøver lige at lede efter noget om data-strukturer.
Avatar billede martinm Nybegynder
31. december 2002 - 16:28 #24
OK! Og mange tak!
Avatar billede arne_v Ekspert
31. december 2002 - 16:28 #25
Avatar billede arne_v Ekspert
31. december 2002 - 16:49 #27
Og hvis du skal have noget teoretisk gods i sværvægts-klassen, så
D.Knuth "The Art of Computer Programming" Vol. I Chapter 2 !

:-)
Avatar billede dittmer Nybegynder
01. januar 2003 - 16:45 #28
For pokker da, Arne. Nu tager du godt nok det rigtig tunge skyts frem! Hvis jeg lige tager de naïve briller på og behændigt overser din smiley, så vil jeg gerne advare martinm mod at læse Knuth, hvis problemet er at forstå kædede lister...

Arne, har du "The Art..."? Jeg har de seneste 10 år glædet mig til at han skulle blive færdig med bind 4..  ;o)
Avatar billede arne_v Ekspert
01. januar 2003 - 16:52 #29
Jeg har Vol. 1-3 2nd Ed. stående på hylden.

Jeg tvivler meget på, at han får lavet flere bind.

Hvorfor lige Vol. 4 ?  (umiddelbart synes jeg
da at 5-7 lyder mere spændende !)
Avatar billede dittmer Nybegynder
01. januar 2003 - 23:07 #30
Med vol. 4 mener jeg 4A-C (vel det, du kalder 4-6). Det er mest 4B og 4C, der er af interesse for mig... Har bedrevet forskning inden for en gren af AI, der involverer en stor del af grafteori og dynamisk programmering...
Jeg er en anelse træt af parsing - der er nok nogen, der laver noget genialt, jeg kan bruge, så det sidste bind vil kun være for at kunne samle "skidtet".

Har du set de korrekturtryk, der er kommet af bind 4 pr. 28. november 2002?
Avatar billede arne_v Ekspert
02. januar 2003 - 07:05 #31
OK, så bind 4 er på vej ? Interessant ! Det var jeg slet ikke klar over.

Med 4 mente jeg 4A-4C. I min udgave taler han om
Vol. 5 = Lexical Scanning & Parsning plus Vol. 6 = The Theory
of Languages og Vol. 7 = Compilers.
Avatar billede dittmer Nybegynder
02. januar 2003 - 10:18 #32
OK. På http://www-cs-faculty.stanford.edu/~knuth/taocp.html skriver han:

Volume 4 (A-C/D): Forventet i 2007
Volume 5: Forventet i 2009

"Future plans
As I write Volumes 4 and 5, I'll need to refer to topics that belong logically in Volumes 1--3 but weren't invented yet when I wrote those books.

After Volume 5 has been completed, I will revise Volumes 1--3 again to bring them up to date. In particular, the new material for those volumes that has been issued in beta-test fascicles will be incorporated at that time.

Then I will publish a ``reader's digest'' edition of Volumes 1--5, condensing the most important material into a single book.

And after Volumes 1--5 are done, God willing, I plan to publish Volume 6 (the theory of context-free languages) and Volume 7 (Compiler techniques), but only if the things I want to say about those topics are still relevant and still haven't been said. Volumes 1--5 represent the central core of computer programming for sequential machines; the subjects of Volumes 6 and 7 are important but more specialized."
Avatar billede arne_v Ekspert
02. januar 2003 - 10:34 #33
2007 - du kommer til at vente lidt endnu !

:-)
Avatar billede dittmer Nybegynder
02. januar 2003 - 20:07 #34
Jow, det har du da ret i. Godt vi har noget andet at rive i indtil da... ;o)
Avatar billede martinm Nybegynder
03. januar 2003 - 13:42 #35
>> Magoo og arne - jeg lader jer deles om points - i har begge hjulpet mig!
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