Quote Originariamente inviata da veilside Visualizza il messaggio
Grazie della risposta ! Ma mi sapresti dire in questo caso particolare tu come lo avresti fatto? Perché quello vorrei sapere
ah... il codice. Non e` cosa buona chiedere il codice, specialmente se si tratta di un esercizio didattico.
Se fortunato che non ho niente di meglio da fare

codice:
    public interface Dictionary<K, V> extends Iterable<K> {

        public void insert(K key, V value);
        public void delete(K KEY);
        public V search(K key);
    }
    public class LinkedList<K, V> implements Dictionary<K,V>{


        private Record<K,V> list = null;
        
        class Record<K1,V1> {
            K1 key;
            V1 value;
            Record<K1, V1> successivo;
            Record<K1, V1> precedente;
            
            Record(K1 key, V1 value){
                this.key = key;
                this.value = value;
            }
        }
        
        public Iterator<K> iterator() {
            return new Iterator<K>() {
                private Record<K, V> current = LinkedList.this.list;
                
                @Override
                public boolean hasNext() {
                    if(LinkedList.this.list == null) return false; // lista vuota
                    if(current == null) // prima iterazione
                        return true; // lista non vuota e primo elemento
                    else
                        return current.successivo != null;
                }


                @Override
                public K next() {
                    if(!hasNext())
                        throw new NoSuchElementException();
                    if(current == null)
                        current = LinkedList.this.list;
                    else
                        current = current.successivo;
                    return current.key;
                }


                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
                
            };
        }




        @Override
        public void insert(K key, V value) {
            Record<K, V> nuovo = new Record<K, V>(key, value);
            if(list==null){
                list = nuovo.successivo = nuovo.precedente = nuovo;
            }else{
                
                nuovo.successivo = list.successivo;
                list.successivo.precedente = nuovo;
                list.successivo = nuovo;
                nuovo.precedente = list;
            }
            
        }




        @Override
        public void delete(K key) {
            Record<K, V> p = null;
            if(list!=null)
            
                for(p=list.successivo;;p=p.successivo){
                    if(p.key.equals(key))
                        break;
                    if(p==list){
                        p = null;
                        break;
                    }
                        
                }
            
            
            if(p==null)
                throw new RuntimeException("elemento non trovato");
            if(p.successivo == p)
                list = null;
            else {
                if(list==p)
                    list = p.successivo;
                    p.successivo.precedente = p.successivo;
                    p.precedente.successivo =p.precedente;
            }
            
        }




        @Override
        public V search(K key) {
            if(list==null)
                throw new RuntimeException("lista vuota");
            for(Record<K, V> p =list.successivo;;p=p.successivo){
                if(p.key.equals(key))
                    return (V) p.value;
                if(p==list)
                    return null;
            }
            
        }
    }
ho usato una classe anonima e sistemato i generics della classe esterna (che e` largamente incompleta e piena di imprecisioni.... setter e getter totalmente assenti!)

Il codice non l`ho testato ma non ho capito perche` vuoi iterare sulle chiavi. In ogni caso, internet e` pieno di esempi di questo tipo.