![]() ![]() |
|
Presentiamo un'unica realizzazione del tipo di
dati astratto Lista, in cui ogni istanza (cioè una lista) memorizza
i suoi dati in una lista concatenata.
Naturalmente è possibile realizzare il TDA Lista
con strutture dati diverse, come Vector (si vedano gli
esercizi), array, ...
|
![]() ![]() |
|
La realizzazione in LinkedList dei seguenti metodi dell'intefaccia List è standard:
La relazione tra le varie entità che costituiscono la classe LinkedList può essere descritta dal seguente diagramma di classi UML:
|
![]() ![]() |
|
In LinkedList
ogni elemento della lista è memorizzato in un nodo, cioè
un oggetto di tipo ListNode.
Questi oggetti hanno due variabili d'istanza: element,
che contiene l'elemento, e next che contiene un riferimento
al prossimo nodo.
|
![]() ![]() |
|
|
![]() ![]() |
|
|
![]() ![]() |
|
|
![]() ![]() |
|
In Java è possibile dichiarare una classe
A
all'interno
di un'altra classe B: in questo caso
A
è una classe interna di
B.
L'uso di classi interne è abbastanza raro. Ha senso dichiarare A come una classe interna di B quando:
Regole di visibilità
|
![]() ![]() |
|
Si noti che il tipo del metodi miaInner() è una interfaccia visibile all'esterno della classe contenitrice: non potrebbe essere MiaInnerClass(), perché non è visibile all'esterno.
|
![]() ![]() |
|
ProtectedItr ha tre variabili
di istanza:
|
![]() ![]() |
|
Il significato dell' espressione condizionale in
next()
è
:
Graficamente,
|
![]() ![]() |
|
Il metodo remove() può
essere invocato solo una volta per ciascuna chiamata a next().
Infatti ha successo solo se precursor e cursor
sono diversi.
|
![]() ![]() |
|
![]() ![]() |
1) Definire la classe VectorList che realizza List usando la classe Vector.
2) Definire l'interfaccia RichList che estende List con i metodi seguenti. che cancella tutte le occorrenze di x, anziché solo la prima. che conta le occorrenze di un oggetto x nella lista. Restituisce 0 nel caso l'oggetto non compaia nella lista. Definire la classe RichLinkedList che realizza RichList estendendo LinkedList. Scrivere una classe TestRichList che utilizza i nuovi metodi.
|