Estendendo ArrayList, metodo Iterator

Boa tarde!
Tentando ser direto.
Um objeto Cliente e um objeto Contato.
O objeto cliente tem uma ArrayList< Contato >.
Essa ArrayList será visualizada pelo usuário do programa através de uma JTable com uma TableModel para o contato em um JFrame.
Neste JFrame existem duas abas e em cada aba um JPanel.
JFrame janela_principal

JPanel dados_pessoais
JPanel contatos

JTable(TableModelContato)

Para simplificar, o objeto Cliente somente será iniciado no JFrame, o JPanel dados_pessoais receberá os dados pessoais do objeto cliente, e o JPanel contatos receberá a ArrayList de contatos do mesmo objeto cliente.
Agora vem o problema, sempre que eu modifico o objeto cliente, sendo carregando um cliente no banco de dados, reiniciando as informações do mesmo ( Cliente cliente = new Cliente(); ) o JTable não se sincroniza com o ArrayList deste objeto.
Minha possível solução será criar uma classe que estenda a classe ArrayList, adicionar métodos na mesma para sincronizar com o JTable e depois mandar os valores para a super classe.

Isso deu certo, porém, um problema surgiu ao utilizar o método:

for(Iterator< Contato > contato = contatos.iterator(); contato.hasNext(); ) {
Contato c = contato.next();
if(c.getContato().isEmpty()) {
contato.remove();
}
}

Pois eu não consigo/não sei como adicionar funções sem alterar o princípio do método Iterator contido na super class

Basicamente:

public class Contato {
private String contato;
  public Contato() {
      contato = new String();
  }
  public String getContato() {
    return this.contato;
  }
  public void setContato(String contato) {
    this.contato = contato;
  }
}
public class Cliente {
  private String nome, rg, cpf;
  private ArrayListContato<Contato> contatos;
  public Cliente() {
    nome = new String();
    rg = new String();
    cpf = new String();
    contatos = new ArrayList<Contato>();
  }
  
  public String getNome() {
    return nome;
  }
  public String getRG() {
    return rg;
  }
  public String getCPF() {
    return cpf;
  }
  public ArrayListContato<Contato> getContatos() {
    return contatos;
  }

  public void setNome(String nome) {
    this.nome = nome;
  }
  public void setRG(String rg) {
    this.rg = rg;
  }
  public void setCPF(String cpf) {
    this.cpf = cpf;
  }
  public void setContatos(ArrayListContato<Contato> contatos) {
    this.contatos = contatos;
  }
public class TableModelContato extends AbstractTableModel {

	private ArrayListContato<Contato> dados;
	private String[] colunas = {"Telefone"};

	public TableModelContato(ArrayListContato<Contato> contatos) {
		this.dados = contatos;
	}

	public void addRow(Contato contato) {
		this.dados.add(contato);
		this.fireTableDataChanged();
	}

	public String getColumnName(int num) {
		return this.colunas[num];
	}

	public int getRowCount() {
		return dados.size();
	}

	public int getColumnCount() {
		return colunas.length;
	}

	public Object getValueAt(int linha, int coluna) {
		switch (coluna) {
		case 0:
			returndados.get(linha).getContato();
		default:
			return null
		}
	}

	public void removeRow(int linha) {
		this.dados.remove(linha);
		this.fireTableRowsDeleted(linha, linha);
	}
	
	public void removeRow(Contato _contato) {
		int x = 0;
		for(Iterator<Contato> contato = dados.iterator(); contato.hasNext();) {
			ContatoImp c = contato.next();
			if(c == _contato) {
				contato.remove();
			}
			x++;
		}
		this.fireTableRowsDeleted(x, x);
	}

	public ContatoImp get(int linha) {
		return this.dados.get(linha);
	}

	public boolean isCellEditable(int linha, int coluna) {
		return false;
	}
	
	public void removeAllRows() {
		while(this.dados.size() > 0) {
			this.dados.remove(0);
			this.fireTableRowsDeleted(0, 0);
		}
	}
	
	public ArrayListContato<Contato> getAllRows() {
		return this.dados;
	}
	
	public void dataChanged() {
		this.fireTableDataChanged();
	}
public class ArrayListContato<ContatoImp> extends ArrayList<ContatoImp> {
	
	public ArrayListContato() {
		super();
	}
	
	public boolean add(Contato contato, TableModelContato table_model) {
		table_model.dataChanged();
		return super.add(contato);
	}
	
	public boolean remove(Contato contato, TableModelContato table_model) {
		table_model.dataChanged();
		return super.remove(contato);
	}
}

Até aqui funcionou tranquilamente, porém, não funcionou com o Iterator, e não tenho ideia de como implementá-lo.
Preciso do Iterator pois ele é Thread Safe.

Se alguém puder me dar uma luz, ou um caminho melhor. Agradeço!