Horstmann-Concetti di informatica e fondamenti di Java 2. 1. Capitolo 17
Introduzione alle strutture di dati. Capitolo 17. Introduzione alle strutture di dati ...
Capitolo 17 Introduzione alle strutture di dati /** Restituisce il primo elemento della lista concatenata. @return il primo elemento della lista concatenata */ public Object getFirst() { if (first == null) throw new NoSuchElementException(); return first.data; } /** Toglie il primo elemento dalla lista concatenata. @return l’elemento eliminato */
Capitolo 17 Introduzione alle strutture di dati /** Restituisce un iteratore per percorrere questa lista. @return un iteratore per percorrere questa lista */ public ListIterator listIterator() { return new LinkedListIterator(); } private Link first; private class Link { public Object data; public Link next; } private class LinkedListIterator implements ListIterator { /** Costruisce un iteratore che punta alla testa della lista concatenata. */
14
Capitolo 17 Introduzione alle strutture di dati public LinkedListIterator() { position = null; previous = null; } /** Sposta l’iteratore dopo l’elemento successivo. @return l’elemento attraversato */ public Object next() { if (!hasNext()) throw new NoSuchElementException(); previous = position; // memorizza per remove if (position == null) position = first; else position = position.next; return position.data; }
Capitolo 17 Introduzione alle strutture di dati /** Controlla se c’è un elemento dopo la posizione dell’iteratore. @return true se c’è un elemento dopo la posizione dell’iteratore */ public boolean hasNext() { if (position == null) return first != null; else return position.next != null; } /** Aggiunge un elemento prima della posizione dell’iteratore e sposta l’iteratore dopo l’elemento inserito. @param obj l’oggetto da aggiungere */ public void add(Object obj) { if (position == null) { addFirst(obj); position = first; 16 }
Capitolo 17 Introduzione alle strutture di dati else { Link newLink = new Link(); newLink.data = obj; newLink.next = position.next; position.next = newLink; position = newLink; } previous = null; } /** Toglie l’ultimo elemento attraversato. Questo metodo può essere chiamato soltanto dopo una chiamata al metodo next(). */ public void remove() { if (position == first) { removeFirst(); position = first; }
Capitolo 17 Introduzione alle strutture di dati else { if (previous == null) throw new IllegalStateException(); previous.next = position.next; position = previous; } previous = null; } /** Imposta il dato presente nell’ultimo elemento attraversato. @param obj il dato da impostare */ public void set(Object obj) { if (position == null) throw new NoSuchElementException(); position.data = obj; } private Link position; private Link previous; } }
import java.util.NoSuchElementException; /** Una iteratore di lista consente l’accesso a una posizione in una lista concatenata. Questa interfaccia contiene un sottoinsieme dei metodi dell’interfaccia standard java.util.ListIterator, in quanto i metodi per l’attraversamento all’indietro sono esclusi. */ public interface ListIterator { /** Sposta l’iteratore dopo l’elemento successivo. @return l’elemento attraversato */ Object next(); /** Controlla se c’è un elemento dopo la posizione dell’iteratore. @return true se c’è un elemento dopo la posizione dell’iteratore