Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Manter duas estruturas ou utilizar uma temporária?

Olá,

Minha solução ficou um pouco diferente da mostrada e gostaria de saber qual seria a melhor para uso no dia a dia.

Ao invés de armazenar as contas em 2 estruturas de dados diferentes eu preferi criar uma estrutura temporária a qual só utilizo na hora de buscar por índice.

A busca ficará mais devagar já que a cada chamada criei uma nova variável temporária, porém não precisarei me preocupar em manter ambas as listas atualizadas.

Minha solução:

public class Banco {
    private Map<String, Conta> contas = new HashMap<>();

    public void adicona(Conta conta) {
        contas.put(conta.nome, conta);
    }

    public Conta pega(int position) {
        List<Conta> list_contas = new ArrayList<>(contas.values());
        return list_contas.get(position);
    }

    public Integer pegaQuantidadeDecontas() {
        return contas.size();
    }

    public Conta buscaPorNome(String nome) {
        return contas.get(nome);
    }
}

No dia a dia qual solução é mais utilizada?

Obrigada desde já.

4 respostas

esse metodo pega deveria receber o nome da conta.. nao eh utilizado no dia a dia pegar todos os valores do mapa e fazer uma busca na lista.

solução!

Oi Tammy, essa sua solução não é muito boa.

Pensa que toda vez que você for chamar o método pega ele vai precisar alocar um espaço novo de memória e copiar uma estrutura de dados inteira pra dentro da outra. Você ganha por não precisar manter as duas estruturas de dados atualizadas, mas perde por causa de um overhead de processamento e nesse caso acredito que manter as duas listas atualizadas seria mais simples

E o ponto que o Alberto comentou é porque é muito mais rápido retornar a conta no mapa passando sua chave, do que fazer a busca numa lista de Contas.

Esse curso pode ter dar algumas dicas sobre isso. https://www.alura.com.br/curso-online-estrutura-de-dados

Philippe eu entendo overhead do Algoritmo é por isso mesmo que fiz a pergunta para saber se é melhor o overhead da máquina de ter que copiar/alocar a estrutura ou o overhead do programador de manter ambas as estruturas.

Achei que era uma otimização prematura.

Também concordo com o Alberto, mas como o exercício anterior tinha o método pega eu achei q deveria mantê-lo.

Obrigada a todos pelo feedback.