TSBParcial2017/src/main/java/tsb/collections/TSBHashtable.java
@Override
            public K next() 
            {
                // control: fail-fast iterator...
                if(TSBHashtable.this.modCount != expected_modCount)
                {    
                    throw new ConcurrentModificationException("next(): modificación inesperada de tabla...");
                }
                
                if(!hasNext()) 
                {
                    throw new NoSuchElementException("next(): no existe el elemento pedido...");
                }
                
                // variable auxiliar t para simplificar accesos...
                TSBArrayList<Map.Entry<K, V>> t[] = TSBHashtable.this.table;
                
                // se puede seguir en el mismo bucket?...
                TSBArrayList<Map.Entry<K, V>> bucket = t[current_bucket];
                if(!t[current_bucket].isEmpty() && current_entry < bucket.size() - 1) { current_entry++; }
                else
                {   
                    // si no se puede...
                    // ...recordar el índice del bucket que se va a abandonar..
                    last_bucket = current_bucket;
                    
                    // buscar el siguiente bucket no vacío, que DEBE existir, ya 
                    // que se hasNext() retornó true...
                    current_bucket++;
                    while(t[current_bucket].isEmpty())
                    {
                        current_bucket++;
                    }
                    
                    // actualizar la referencia bucket con el núevo índice...
                    bucket = t[current_bucket];
                    
                    // y posicionarse en el primer elemento de ese bucket...
                    current_entry = 0;
                }
                
                // avisar que next() fue invocado con éxito...
                next_ok = true;
                
                // y retornar la clave del elemento alcanzado...
                K key = bucket.get(current_entry).getKey();
                return key;
            }
/*
             * Retorna el siguiente elemento disponible en la tabla.
             */
Retorna el siguiente elemento disponible en la tabla.
Retorna el siguiente elemento disponible en la tabla .
@Override
            public K next() 
            {
                if(TSBHashtable.this.modCount != expected_modCount)
                {    
                    throw new ConcurrentModificationException("next(): modificación inesperada de tabla...");
                }
                if(!hasNext()) 
                {
                    throw new NoSuchElementException("next(): no existe el elemento pedido...");
                }
                TSBArrayList<Map.Entry<K, V>> t[] = TSBHashtable.this.table;
                TSBArrayList<Map.Entry<K, V>> bucket = t[current_bucket];
                if(!t[current_bucket].isEmpty() && current_entry < bucket.size() - 1) { current_entry++; }
                else
                {   
                    last_bucket = current_bucket;
                    current_bucket++;
                    while(t[current_bucket].isEmpty())
                    {
                        current_bucket++;
                    }
                    bucket = t[current_bucket];
                    current_entry = 0;
                }
                next_ok = true;
                K key = bucket.get(current_entry).getKey();
                return key;
            }
@ Override public K next ( ) { if ( TSBHashtable . this . modCount != expected_modCount ) { throw new ConcurrentModificationException ( "next(): modificación inesperada de tabla...") ; } if ( ! hasNext ( ) ) { throw new NoSuchElementException ( "next(): no existe el elemento pedido..." ) ; } TSBArrayList < Map . Entry < K , V > > t [ ] = TSBHashtable . this . table ; TSBArrayList < Map . Entry < K , V > > bucket = t [ current_bucket ] ; if ( ! t [ current_bucket ] . isEmpty ( ) && current_entry < bucket . size ( ) - 1 ) { current_entry ++ ; } else { last_bucket = current_bucket ; current_bucket ++ ; while ( t [ current_bucket ] . isEmpty ( ) ) { current_bucket ++ ; } bucket = t [ current_bucket ] ; current_entry = 0 ; } next_ok = true ; K key = bucket . get ( current_entry ) . getKey ( ) ; return key ; }
Retorna el siguiente elemento disponible en la tabla.
Retorna el siguiente elemento disponible en la tabla .
// control: fail-fast iterator...
 // variable auxiliar t para simplificar accesos...
 // se puede seguir en el mismo bucket?...
 // si no se puede...
 // ...recordar el índice del bucket que se va a abandonar..
 // buscar el siguiente bucket no vacío, que DEBE existir, ya 
 // que se hasNext() retornó true...
 // actualizar la referencia bucket con el núevo índice...
 // y posicionarse en el primer elemento de ese bucket...
 // avisar que next() fue invocado con éxito...
 // y retornar la clave del elemento alcanzado...
