package dataStructures1112; /** * @author Ricardo Gaspar nº 35277 Ricardo Cruz nº 34951 Turno P8 Docente * Armanda Rodrigues */ public class SepChainHashTableIterator implements Iterator> { /** * Número de série da versão. */ private static final long serialVersionUID = 1L; /** * Array de dicionários. */ private Dictionary[] table; /** * Posição actual na tabela de dispersão. */ private int current; /** * Iterador para uma dada lista da tabela. */ private Iterator> it; /** * Construtor da SepChainHashTableIterator. Cria e inicializa um iterador * para uma dada tabela. * * @param table * Tabela de dispersão para a qual será criado o iterador. */ public SepChainHashTableIterator(Dictionary[] table) { this.table = table; this.rewind(); } @Override public boolean hasNext() { if (it != null) return this.it.hasNext(); return false; } @Override public Entry next() { if ( !this.hasNext() ) throw new NoSuchElementException(); Entry next = it.next(); if (!it.hasNext()) it = this.nextListIterator(++current); return next; } @Override public void rewind() { it = this.nextListIterator(0); } public Iterator> nextListIterator(int position) { Dictionary list; for (int i = position; i < table.length; i++) { list = table[i]; if (!list.isEmpty()) { current = i; return list.iterator(); } } return null; } }