Problema de Remoção

Olá galera estou tento um problema em remover objeto. Estou fazendo um programa de cadastro de Pessoas e Contas. Dentro da classe Pessoa eu tenho um ArrayList de Contas.
Eu tenho uma classe chamada Pessoa e PessoaDAO, no caso, meu professor disse pra excluir primeiro as contas e depois a pessoa. Mas eu não estou conseguindo, quando crio uma conta para uma pessoa ela não exclui, nem a Pessoa nem a Conta. Algúem pode me ajudar?

Método de excluir em Pessoa:
           public void excluirContas() {
            contas.remove(getContas());
        }

Método de excluir em PessoaDAO:

public void removerPessoa() {

    System.out.println("Digite o CPF para buscar: ");
    String busca = scan.nextLine();

    for (Pessoa pessoa : list) {
        if (pessoa.getCpf().equals(busca)) {
            pessoa.excluirContas();
            list.remove(pessoa);
            System.out.println(list);
            break;
        } else {
            System.out.println("\nCliente não Encontrado!");
        }
    }
}

Você não pode remover um elemento de um arrayList enquanto você esta iterando, para isso você tem que usar um iterator.

Você não disse se o for esta sendo chamado e nem se esta lançando uma exceção, mas supondo que esteja tudo correto, o código lançará uma exceção do tipo java.util.ConcurrentModificationException

list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
		
Iterator<String> iterator = list.iterator();
		
while(iterator.hasNext())
{
	if(iterator.next().equals("3")) 
    {
		iterator.remove();
	}
}
			
for(String s: list)
{
	System.out.println(s);
}
	

Adaptando pro meu código como ficaria a remoção? Pois eu preciso remover as contas da pessoa que eu pesquiso pelo CPF.

Nesse código, qual a diferença entre contas e getContas()?

Qual a dificuldade? Você não pesquisou sobre Iterator né?

Não adianta nada eu chegar aqui e colocar a resolução.

Primeiro busca a pessoa:

// PessoaDao
public Pessoa buscarPorCPF(String cpf);

Segundo excluir as contas, mas antes excluir apenas uma:

// ContaDao
public void excluirConta(Conta c) {
    Pessoa p = c.getPessoa();
    /* .... */
}

public void excluirTodasAsContas(Pessoa p) {
    for (Conta c: p.getContas()) { excluirConta(c); }
}

Terceiro excluir Pessoa

// PessoaDao
public void excluirPessoa(Pessoa p);

Quarto criar a interface de entrada/saída

public void removerPessoa() {
    System.out.println("Digite o CPF para buscar: ");
    String cpf = scan.nextLine();
    Pessoa p = PessoaDAO.buscarPorCpf(cpf);
    ContaDAO.excluirTodasAsContas(p);
    PessoaDAO.excluirPessoa(p);
}

O contas é o array de Contas em pessoa e getContas são as contas da pessoa, entao o array vai remover as contas da pessoa.

Se você implementar equals e hashCode usando apenas o cpf, você pode remover sem precisar iterar

list.remove(obj);

Pelo seu código, deve ser uma implementação de List e nãio um array…

Por acaso o método getContas não retorna exatamente o objeto contas?

O método remove de um objeto do tipo List remove o objeto passado como parâmetro caso aquele objeto esteja armazenado dentro da coleção.
Não creio que seu List seja uma coleção de objetos List.

Sem ver como você implementou suas classes, fica difícil ajudar, mas creio que você queira fazer um

contas.clear(); // esvaziar a lista de contas

Ou então um

contas.removeAll(getContas()); // remover de contas todas as contas contidas em getContas()

Galera só uma dúvida:

Qnd uso o Iterator na arquitetura MVC (no caso no Controller, para eu acessar a arraylist), o código fica diferente, ou segue aquele código “padrão” de iterator mesmo? To com receio de ser quebra-galho …

O código padrão de iterator seria isso daqui, certo?

while (iterator.hasNext()) {
            InserirModel obj = iterator.next();

Ou:

for (Iterator iterator = a.iterator(); iterator.hasNext();) {
            InserirModel obj = (InserirModel) iterator.next();

No MVC, seria assim também?