Utilizzando ListIterator su una LinkedList personalizzato
-
24-10-2019 - |
Domanda
Ho un costume, generico, singolarmente LinkedList che io stesso costruito. Posso aggiungere, rimuovere, ecc a elenco bene. Mi piacerebbe implementare la ListIterator Java per la mia classe. Come potrei fare per iniziare questo? Quali sono i metodi ho bisogno di aggiungere alla mia classe? Tutto quello che posso trovare sul web è esempi di utilizzo del ListIterator sul default Java LinkedList che non è buono per me. Grazie!
Soluzione
È possibile creare una seconda classe (di solito una classe annidata della vostra lista collegata) che implementa tutte le funzioni dell'interfaccia ListIterator. Si noti che alcune funzioni (come add
e remove
) sono opzionali-si può semplicemente gettare un UnsupportedOperationException. Le vostre esigenze lista di classe legati al implementare i metodi listIterator()
e listIterator(int)
per restituire un'istanza della seconda classe.
Altri suggerimenti
Si dovrebbe attuare il Iterator o ListIterator interfaccia.
Cerca gli metodi che ListIterator ha. Sarà necessario assicurarsi che la vostra versione di esso ha gli stessi metodi.
Se è possibile, cercare un Interface
che usi ListIterator, e implementare tale interfaccia.
Per le prestazioni, è possibile implementare ListIterator
e mantenere una versione "indietro" della vostra lista, come si iterare attraverso di essa. Ciò emulare una lista doppiamente collegata, ma solo per l'iteratore.
Tuttavia, è probabilmente più sicuro per implementare solo la tua lista concatenata come un elenco sotto doppiamente-linked.
Se si tratta di una lista concatenata semplice, attuazione ListIterator
sarà difficile (se non impossibile), come ha bisogno di navigare in entrambe le direzioni, che è possibile implementare solo riavviando dalla testa più e più volte.
In entrambi rendere la vostra lista doppio legato, o si dovrà gettare UnsupportedOperationException
su un sacco di metodi. (O vivere con O prestazioni (n) nella metà dei metodi)