Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    http://docs.oracle.com/javase/6/docs.../Iterator.html

    devi creare una classe che implementa l'interfaccia iterator. Quindi i tre metodi elencati. E' piuttosto banale, io ci metterei due sole proprietà, una la tua linked list, e l'altra una variabile "puntatore" all'elemento corrente.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    Quote Originariamente inviata da kuarl Visualizza il messaggio
    http://docs.oracle.com/javase/6/docs.../Iterator.html

    devi creare una classe che implementa l'interfaccia iterator. Quindi i tre metodi elencati. E' piuttosto banale, io ci metterei due sole proprietà, una la tua linked list, e l'altra una variabile "puntatore" all'elemento corrente.
    Grazie della risposta ! Ma mi sapresti dire in questo caso particolare tu come lo avresti fatto? Perché quello vorrei sapere

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.