Web Imagens Vídeos Mapas Notícias Orkut Gmail mais »
Grupos visitados recentemente | Ajuda | Acessar
Página inicial dos Grupos do Google
Dúvida com remoção em um HashSet usando Iterator
Há um número excessivo de tópicos que aparecem em primeiro plano neste grupo. Para fazer com que este tópico apareça primeiro, elimine essa opção de um outro tópico.
Erro ao processar a solicitação. Tente novamente.
sinalizar
  Mensagens 1 - 25 de 60 - Recolher todas  -  Traduzir tudo para Traduzido (ver todos os originais)   Recentes >
O grupo no qual você está postando é um grupo da Usenet. As mensagens postadas neste grupo farão com que o seu e-mail fique visível para qualquer pessoa na internet.
Sua resposta não foi enviada.
Postagem publicada
 
De:
Para:
Cc:
Encaminhar para
Adicionar Cc | Adicionar Encaminhar para | Editar Assunto
Assunto:
Validação:
Com o objetivo de verificação, digite os caracteres que você vê na figura abaixo ou os números que ouvir ao clicar no ícone de acessibilidade. Ouça e digite os números que ouvir
 
Arthur Gouveia  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:23
De: "Arthur Gouveia" <arthur.gouv...@gmail.com>
Data: Thu, 3 Apr 2008 10:23:33 -0300
Local: Qui 3 abr 2008 10:23
Assunto: Dúvida com remoção em um HashSet usando Iterator

Eu sei que Maurício vai querer me esganar por isso e falar que eu só jogava
Tetris nas aulas dele, mas...

Quando eu tento remover um determinado objeto de um HashSet, estou recebendo
um ConcurrentModificationException.
Isso acontece tanto para o método removerUsuario quanto para o método
removerProduto.

Lembro-me vagamente de algo sobre não poder fazer alterações na lista caso o
Iterator ainda estivesse rodando... =(
Me ajudem, por favor! :B

Obs.: lProdutos (HashSet) guarda uma lista de objetos do tipo Produto, mas
por hora só armazeno objetos do tipo Livro, que são Produto.
         lUsuarios (HashSet) guarda uma lista de objetos do tipo Usuario;
         Na classe principal existe uma declaração private Livro liv e
private Usuario usr;

public String removerProduto(int codigo) {

        if(pesquisarProduto(codigo) == false) return "Produto inexistente";

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                lprodutos.remove(liv);
            }
        }
        return "Produto removido";
    }

    public String removerUsuario(int matricula) {

        if(pesquisarUsuario(matricula) == false) return "Usuário
inexistente";

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = (Usuario) i.next();

            if(usr.getMatricula() == matricula){
                lusuarios.remove(usr);

            }

        }
     return "Usuário removido";

}

public boolean pesquisarProduto(int codigo) {

        boolean encontrou = false;

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == (codigo)){
                encontrou = true;
            }

        }

        return encontrou;
    }

    public boolean pesquisarUsuario(int matricula) {

        boolean encontrou = false;

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = i.next();

            if(usr.getMatricula() == (matricula)){
                encontrou = true;
            }

        }

        return encontrou;
    }

--
Arthur Gouveia.


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Vinicius Ferraz  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:28
De: "Vinicius Ferraz" <vinicius.fer...@gmail.com>
Data: Thu, 3 Apr 2008 10:28:21 -0300
Local: Qui 3 abr 2008 10:28
Assunto: Re: [PBJUG] Dúvida com remoção em um HashSet usando Iterator

Eh, não pode remover um elemento de um Set que está iterando. Um modo de
fazer seria armazenar em outro Set quais deverão ser removidos, e itera
nesse set de elementos a remover removendo no set *lprodutos*.

2008/4/3 Arthur Gouveia <arthur.gouv...@gmail.com>:

--
Vinícius Ferraz Campos Florentino
http://www.lsd.ufcg.edu.br/~vinicius
Stefanini IT Solutions
(061) 3212 7220
(061) 8147 6464

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Flávio Santos  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:30
De: "Flávio Santos" <flavio.bar...@gmail.com>
Data: Thu, 3 Apr 2008 10:30:06 -0300
Local: Qui 3 abr 2008 10:30
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Ou remova usando o Iterator:

Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                i.remove();
            }
        }

-- barata

2008/4/3 Vinicius Ferraz <vinicius.fer...@gmail.com>:

--
Flávio Roberto Santos
http://www.ourgrid.org/~flavio

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Arthur Gouveia  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:38
De: "Arthur Gouveia" <arthur.gouv...@gmail.com>
Data: Thu, 3 Apr 2008 10:38:16 -0300
Local: Qui 3 abr 2008 10:38
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

Funcionou bem :D

Thanks a lot, dude!

2008/4/3 Flávio Santos <flavio.bar...@gmail.com>:

--
Arthur Gouveia.

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Maurício Linhares  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:38
De: "Maurício Linhares" <mauricio.linha...@gmail.com>
Data: Thu, 3 Apr 2008 10:38:39 -0300
Local: Qui 3 abr 2008 10:38
Assunto: Re: [PBJUG] Dúvida com remoção em um HashSet usando Iterator
Ao menos você só colocou um return em cada método, quer dizer que não
foi perdito de tudo, o carão vai diminuir.

2008/4/3 Arthur Gouveia <arthur.gouv...@gmail.com>:

--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Pergentino Araújo  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 10:40
De: "Pergentino Araújo" <jpergent...@gmail.com>
Data: Thu, 3 Apr 2008 10:40:05 -0300
Local: Qui 3 abr 2008 10:40
Assunto: Re: [PBJUG] Dúvida com remoção em um HashSet usando Iterator

use o remove do iterator :)

2008/4/3 Arthur Gouveia <arthur.gouv...@gmail.com>:

--
Atenciosamente, Pergentino.

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Flávio Santos  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 12:47
De: "Flávio Santos" <flavio.bar...@gmail.com>
Data: Thu, 3 Apr 2008 12:47:54 -0300
Local: Qui 3 abr 2008 12:47
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Sem querer ser chato mas já sendo...

Olhando seu código com mais calma:
- Por que seus métodos retornam String? Isso está muito feio.
- Seus métodos de busca estão muito ineficientes. Se o item procurado
for o primeiro numa lista de 10000000 de elementos, o laço vai
executar 10000000 vezes ao invés de apenas UMA. Por que você não cai
fora do laço quando entra o objeto procurado?

-- barata

2008/4/3 Maurício Linhares <mauricio.linha...@gmail.com>:

--
Flávio Roberto Santos
http://www.ourgrid.org/~flavio

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Joshua Maia Rodrigues  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 14:01
De: Joshua Maia Rodrigues <joshuam...@yahoo.com.br>
Data: Thu, 3 Apr 2008 14:01:41 -0300 (ART)
Local: Qui 3 abr 2008 14:01
Assunto: Re: [PBJUG] Dúvida com remoção em um HashSet usando Iterator

           Olha Arthur, você não pode remover um elemento de uma coleção quando ela tá sendo iterada. Esse erro já acontaceu comigo em um foreach que era equivalente ao seu while. Eu vou colocar como eu faria esse método e você ver se vale a pena fazer do meu jeito:

public void removerProduto(int codigo) throws AlgumaExcessao{

        if(pesquisarProduto(codigo) == false)
                throw new AlgumaExcessao();

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                break;
            }
        }
         lprodutos.remove(liv);
    }

    Eu não sei onde você declara essa variável liv, mas pelo que eu tô vendo ela é visível ao escopo do método removerProduto. Analogamente, eu faria a mesma coisa em removerUsuario.

Atenciosamente, Joshua.

Arthur Gouveia <arthur.gouv...@gmail.com> escreveu: Eu sei que Maurício vai querer me esganar por isso e falar que eu só jogava Tetris nas aulas dele, mas...

Quando eu tento remover um determinado objeto de um HashSet, estou recebendo um ConcurrentModificationException.
 Isso acontece tanto para o método removerUsuario quanto para o método removerProduto.

Lembro-me vagamente de algo sobre não poder fazer alterações na lista caso o Iterator ainda estivesse rodando... =(
Me ajudem, por favor! :B

Obs.: lProdutos (HashSet) guarda uma lista de objetos do tipo Produto, mas por hora só armazeno objetos do tipo Livro, que são Produto.
         lUsuarios (HashSet) guarda uma lista de objetos do tipo Usuario;
         Na classe principal existe uma declaração private Livro liv e private Usuario usr;

public String removerProduto(int codigo) {

        if(pesquisarProduto(codigo) == false) return "Produto inexistente";

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                lprodutos.remove(liv);
            }
        }
         return "Produto removido";
    }

    public String removerUsuario(int matricula) {

        if(pesquisarUsuario(matricula) == false) return "Usuário inexistente";

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = (Usuario) i.next();

            if(usr.getMatricula() == matricula){
                 lusuarios.remove(usr);

            }

        }
     return "Usuário removido";

}

public boolean pesquisarProduto(int codigo) {

         boolean encontrou = false;

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

             if(liv.getCodigo() == (codigo)){
                encontrou = true;
            }

        }

        return encontrou;
    }

    public boolean pesquisarUsuario(int matricula) {

        boolean encontrou = false;

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = i.next();

             if(usr.getMatricula() == (matricula)){
                encontrou = true;
            }

        }

        return encontrou;
    }

--
Arthur Gouveia.

---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Guilherme Germoglio  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 14:17
De: "Guilherme Germoglio" <germog...@gmail.com>
Data: Thu, 3 Apr 2008 14:17:12 -0300
Local: Qui 3 abr 2008 14:17
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

2008/4/3 Joshua Maia Rodrigues <joshuam...@yahoo.com.br>:

Cuidado só com o desempenho. Digamos que o produto foi encontrado e
removido. Quantas vezes, em média, a lista é percorrida?

* pesquisarProduto: 1/2 da lista é percorrida.
* while: 1/2 da lista é percorrida.
* Iprodutos.remove(liv): 1/2 da lista é percorrida.

Outra coisa: é 'exceção'.

--
Guilherme

msn: guigermog...@hotmail.com
homepage: http://germoglio.googlepages.com


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Flávio Santos  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 14:24
De: "Flávio Santos" <flavio.bar...@gmail.com>
Data: Thu, 3 Apr 2008 14:24:38 -0300
Local: Qui 3 abr 2008 14:24
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Complementando o que o Guilherme falou...

Para que o remove() funcione é preciso que sua classe Produto
implemente adequadamente o método equals().

No entanto, essa solução não é adequada pelos itens já citados em
emails anteriores.
Mais uma vez, use o remove() do Iterator.

-- barata

2008/4/3 Guilherme Germoglio <germog...@gmail.com>:

--
Flávio Roberto Santos
http://www.ourgrid.org/~flavio

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Clovis Leoncio Junior  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 16:01
De: "Clovis Leoncio Junior" <clovisleon...@gmail.com>
Data: Thu, 3 Apr 2008 16:01:31 -0300
Local: Qui 3 abr 2008 16:01
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

   Você tem um HashSet em mãos, a melhor maneira que conheço é implementar o
equals e o hashCode corretamente e chamar diretamente o remove do conjunto.
Sua implementação ficará limpa e eficiente.

   E sobre a questão de só ter um retorno por método acho que essa questão é
subjetiva e vai variar muito pra cada caso. Acho muito mais simples fazer
algo do tipo:

    public Usuario pesquisarUsuario(int matricula) {
        for(Usuario usuario : lusuarios) {
            if(usuario .getMatricula() == (matricula)){
                return usuario;
            }
        }
        return null;
    }

Do que algo do tipo:

    public boolean pesquisarUsuario(int matricula) {
        boolean encontrou = false;
        Iterator<Usuario> i = lusuarios.iterator();
        while(i.hasNext()){
            usr = i.next();
            if(usr.getMatricula() == (matricula)){
                encontrou = true;
            }
        }
        return encontrou;
    }

    É óbvio que se for um método enorme:
    a) ficará confuso (portanto, perigoso) ter vários return.
    b) talvez não devesse ser um método enorme.

--
Clovis Leoncio Junior


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Joshua Maia Rodrigues  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 16:23
De: Joshua Maia Rodrigues <joshuam...@yahoo.com.br>
Data: Thu, 3 Apr 2008 16:23:37 -0300 (ART)
Local: Qui 3 abr 2008 16:23
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

        Refazendo o método sugerido por mim. Estou supondo agora que Arthur implementou o equals e o hashCode nas classes Produto e Usuário:  

public void removerProduto(Produto produto) {      
         lprodutos.remove(produto);

}

no método para pesquisar o produto faça:

public Produto pesquisarProduto(int codigo) {    
        Produto retornoProduto = null;
        Iterator<Produto> i = lprodutos.iterator();        
        while(i.hasNext()){            
            liv = (Livro) i.next();            
             if(liv.getCodigo() == (codigo)){
                retornoProduto = liv;
                break;
            }            
        }        
        return retornoProduto;
  }

De forma análoga, faça para usuário.

Atenciosamente, Joshua.

Guilherme Germoglio <germog...@gmail.com> escreveu:

2008/4/3 Joshua Maia Rodrigues <joshuam...@yahoo.com.br>:
            Olha Arthur, você não pode remover um elemento de uma coleção quando ela tá sendo iterada. Esse erro já acontaceu comigo em um foreach que era equivalente ao seu while. Eu vou colocar como eu faria esse método e você ver se vale a pena fazer do meu jeito:

public void removerProduto(int codigo) throws AlgumaExcessao{

        if(pesquisarProduto(codigo) == false)
                throw new AlgumaExcessao();

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro)  i.next();

            if(liv.getCodigo() == codigo){

                break;
            }
        }
         lprodutos.remove(liv);
Cuidado só com o desempenho. Digamos que o produto foi encontrado e removido. Quantas vezes, em média, a lista é percorrida?

* pesquisarProduto: 1/2 da lista é percorrida.
* while: 1/2 da lista é percorrida.
* Iprodutos.remove(liv): 1/2 da lista é percorrida.

Outra coisa: é 'exceção'.

    }

    Eu não sei onde você declara essa variável liv, mas pelo que eu tô vendo ela é visível ao escopo do método removerProduto. Analogamente, eu faria a mesma coisa em removerUsuario.

Atenciosamente, Joshua.

Arthur Gouveia <arthur.gouv...@gmail.com> escreveu:
 Eu sei que Maurício vai querer me esganar por isso e falar que eu só jogava Tetris nas aulas dele,  mas...

Quando eu tento remover um determinado objeto de um HashSet, estou recebendo um ConcurrentModificationException.
 Isso acontece tanto para o método removerUsuario quanto para o método removerProduto.

Lembro-me vagamente de algo sobre não poder fazer alterações na lista caso o Iterator ainda estivesse rodando... =(
Me ajudem, por favor! :B

Obs.: lProdutos (HashSet) guarda uma lista de objetos do tipo Produto, mas por hora só armazeno objetos do tipo Livro, que são Produto.
          lUsuarios (HashSet) guarda uma lista de objetos do tipo Usuario;
         Na classe principal existe uma declaração private Livro liv e private Usuario usr;

public String removerProduto(int codigo) {

        if(pesquisarProduto(codigo) == false) return "Produto  inexistente";

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                 lprodutos.remove(liv);
            }
        }
         return "Produto removido";
    }

    public String removerUsuario(int matricula) {

        if(pesquisarUsuario(matricula) == false) return "Usuário inexistente";

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

             usr = (Usuario) i.next();

            if(usr.getMatricula() == matricula){
                 lusuarios.remove(usr);

            }

         }
     return "Usuário removido";

}

public boolean pesquisarProduto(int codigo) {

         boolean encontrou = false;

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

             if(liv.getCodigo() == (codigo)){
                encontrou = true;
            }

        }

        return encontrou;
    }

    public boolean pesquisarUsuario(int matricula) {

        boolean encontrou = false;

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = i.next();

             if(usr.getMatricula() == (matricula)){
                 encontrou = true;
            }

        }

        return encontrou;
    }

--
Arthur Gouveia.

---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!

--
Guilherme

msn: guigermog...@hotmail.com
homepage: http://germoglio.googlepages.com

---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Rodrigo C. L.  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 16:41
De: "Rodrigo C. L." <tapetedepada...@gmail.com>
Data: Thu, 3 Apr 2008 16:41:11 -0300
Local: Qui 3 abr 2008 16:41
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

> * Iprodutos.remove(liv): 1/2 da lista é percorrida.

er... remove num hashset é O(1), não?

||
|| Rodrigo Cerqueira Lopes
|| Estudante de computação na UFCG
|| Também em rodrig...@lcc.ufcg.edu.br
||
|| "Sofisticado - 1. Falsificado, contrafeito, adulterado. (...)"
|| Aurélio Ed. Eletrônica v3.0
||


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Clovis Leoncio Junior  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 16:50
De: "Clovis Leoncio Junior" <clovisleon...@gmail.com>
Data: Thu, 3 Apr 2008 16:50:59 -0300
Local: Qui 3 abr 2008 16:50
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

Acho que não. Você está assumindo que o hashCode identificaria unicamente o
objeto mas isto não acontece, existem colisões. Dependendo do seu algoritmo
de hashCode o número de colisões será alto.

Mas também não acredito que metade da lista seja percorrida, creio que seja
menor.

2008/4/3 Rodrigo C. L. <tapetedepada...@gmail.com>:

--
Clovis Leoncio Junior

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Guilherme Germoglio  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 3 abr 2008, 17:05
De: "Guilherme Germoglio" <germog...@gmail.com>
Data: Thu, 3 Apr 2008 17:05:44 -0300
Local: Qui 3 abr 2008 17:05
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

2008/4/3 Rodrigo C. L. <tapetedepada...@gmail.com>:

> > * Iprodutos.remove(liv): 1/2 da lista é percorrida.

> er... remove num hashset é O(1), não?

Isso mesmo. Desculpem-me. O(1) usando uma hash table teórica. E algo próximo
a isso, dependendo da razão número de buckets/número de elementos na tabela
na prática.

> ||
> || Rodrigo Cerqueira Lopes
> || Estudante de computação na UFCG
> || Também em rodrig...@lcc.ufcg.edu.br
> ||
> || "Sofisticado - 1. Falsificado, contrafeito, adulterado. (...)"
> || Aurélio Ed. Eletrônica v3.0

> ||

--
Guilherme

msn: guigermog...@hotmail.com
homepage: http://germoglio.googlepages.com


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Arthur Gouveia  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 10:39
De: "Arthur Gouveia" <arthur.gouv...@gmail.com>
Data: Fri, 4 Apr 2008 10:39:16 -0300
Local: Sex 4 abr 2008 10:39
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

Bom, seguindo o que foi dito aqui, alterei meu código...

Os métodos de "Pesquisar" não são pra retornar os dados do usuário ou
produto, mas sim para saber se são válidos: apenas retornar um true ou false
para exibir uma mensagem de acordo com isso. É um projeto de uma cadeira da
Universidade, e é desse modo que foi passado...

O que mais eu deveria consertar?

public String removerProduto(int codigo) {

        if(pesquisarProduto(codigo) == false) return "Produto inexistente";

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                i.remove();
                break;
            }
        }
        return "Produto removido";
    }

    public String removerUsuario(int matricula) {

        if(pesquisarUsuario(matricula) == false) return "Usuário
inexistente";

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = (Usuario) i.next();

            if(usr.getMatricula() == matricula){
                i.remove();
                break;

            }

        }

        return "Usuário removido";
    }

    public boolean pesquisarProduto(int codigo) {

        boolean encontrou = false;

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == (codigo)){
                encontrou = true;
                break;
            }

        }

        return encontrou;
    }

    public boolean pesquisarUsuario(int matricula) {

        boolean encontrou = false;

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = i.next();

            if(usr.getMatricula() == (matricula)){
                encontrou = true;
                break;
            }

        }

        return encontrou;
    }

2008/4/3 Guilherme Germoglio <germog...@gmail.com>:

--
Arthur Gouveia.

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Maurício Linhares  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 10:44
De: "Maurício Linhares" <mauricio.linha...@gmail.com>
Data: Fri, 4 Apr 2008 10:44:35 -0300
Local: Sex 4 abr 2008 10:44
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Você deveria parar de retornar Strings e simplesmente retornar true ou
false, quem chamou esse método é que deve montar a mensagem.

2008/4/4 Arthur Gouveia <arthur.gouv...@gmail.com>:

--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Flávio Santos  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 10:52
De: "Flávio Santos" <flavio.bar...@gmail.com>
Data: Fri, 4 Apr 2008 10:52:57 -0300
Local: Sex 4 abr 2008 10:52
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
As variáveis booleanas nos métodos de pesquisa são desnecessárias.
Você simplesmente deve retornar true caso encontre, e false no final
do método.
Seus métodos de remoção fazem trabalho de português: Primeiro vc itera
na lista toda pra buscar se o elemente existe. Depois, caso exista,
você itera mais uma vez para mandar remover. Oo

-- barata

2008/4/4 Maurício Linhares <mauricio.linha...@gmail.com>:

--
Flávio Roberto Santos
http://www.ourgrid.org/~flavio

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Clovis Leoncio Junior  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 10:53
De: "Clovis Leoncio Junior" <clovisleon...@gmail.com>
Data: Fri, 4 Apr 2008 10:53:08 -0300
Local: Sex 4 abr 2008 10:53
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

Além disso:
- o método não deveria se chamar "pesquisar" e sim algo do tipo "existe".
- na iteração dentro do while você usa uma variável chamada "usr" suponho
que ela seja uma variável do objeto mas, se o usuário não existir a será
guardado como valor desta variável o último usuário da coleção, ficando
assim o objeto com um estado inconsistente.

2008/4/4 Maurício Linhares <mauricio.linha...@gmail.com>:

--
Clovis Leoncio Junior

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Arthur Gouveia  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:03
De: "Arthur Gouveia" <arthur.gouv...@gmail.com>
Data: Fri, 4 Apr 2008 11:03:49 -0300
Local: Sex 4 abr 2008 11:03
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

E agora?

public boolean removerProduto(int codigo) {

        Iterator<Produto> i = lprodutos.iterator();
        boolean remocao = false;

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == codigo){
                i.remove();
                remocao = true;
                break;
            }
        }
        return remocao;
    }

    public boolean removerUsuario(int matricula) {

        Iterator<Usuario> i = lusuarios.iterator();
        boolean remocao = false;
        while(i.hasNext()){

            usr = (Usuario) i.next();

            if(usr.getMatricula() == matricula){
                i.remove();
                remocao = true;
                break;

            }

        }

        return remocao;
    }

    public boolean existeProduto(int codigo) {

        boolean encontrou = false;

        Iterator<Produto> i = lprodutos.iterator();

        while(i.hasNext()){

            liv = (Livro) i.next();

            if(liv.getCodigo() == (codigo)){
                encontrou = true;
                break;
            }

        }

        return encontrou;
    }

    public boolean existeUsuario(int matricula) {

        boolean encontrou = false;

        Iterator<Usuario> i = lusuarios.iterator();

        while(i.hasNext()){

            usr = i.next();

            if(usr.getMatricula() == (matricula)){
                encontrou = true;
                break;
            }

        }

        return encontrou;
    }

2008/4/4 Clovis Leoncio Junior <clovisleon...@gmail.com>:

--
Arthur Gouveia.

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Joshua Maia Rodrigues  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:19
De: Joshua Maia Rodrigues <joshuam...@yahoo.com.br>
Data: Fri, 4 Apr 2008 11:19:07 -0300 (ART)
Local: Sex 4 abr 2008 11:19
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

        Arthur, implemente equals e hashcode nas classes Usuario e Produto e coloca assim esses seus métodos:

    public boolean removerProduto(Produto produto) {        
       return lprodutos.remove(produto);
    }

    public boolean removerUsuario(Usuario usuario) {        
         return lusuarios.remove(usuario);      
    }

    public Produto pesquisarProduto(int codigo) {        
        Iterator<Produto> i = lprodutos.iterator();        
        while(i.hasNext()){            
            liv = (Livro) i.next();            
            if(liv.getCodigo() == (codigo)){
                return liv;
             }            
        }        
        return null;
    }

    public Usuario pesquisarUsuario(int matricula) {        
        Iterator<Usuario> i = lusuarios.iterator();        
        while(i.hasNext()){            
            usr = i.next();            
            if(usr.getMatricula() == (matricula)){
                return usr;
             }            
        }        
        return null;
    }

[]'Joshua.

---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Vítor Avelino  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:17
De: "Vítor Avelino" <vito...@gmail.com>
Data: Fri, 4 Apr 2008 11:17:31 -0300
Local: Sex 4 abr 2008 11:17
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Nos métodos existeUsuario e existeProduto você pode simplesmente
substituir as duas linhas por somente um return true.

            if(usr.getMatricula() == (matricula)){
                return true;
            }

            if(liv.getCodigo() == (codigo)){
                return true;
            }

Nos métodos removerUsuario e removerProduto você faz o mesmo.

             if(liv.getCodigo() == codigo){
                i.remove();
                retrurn true;
            }

            if(usr.getMatricula() == matricula){
                i.remove();
                return true;
            }

Fora do laço você põe 'return false'.
2008/4/4 Arthur Gouveia <arthur.gouv...@gmail.com>:


    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Arthur Gouveia  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:35
De: "Arthur Gouveia" <arthur.gouv...@gmail.com>
Data: Fri, 4 Apr 2008 11:35:34 -0300
Local: Sex 4 abr 2008 11:35
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

É que eu gostaria de deixar apenas 1 return por método...

2008/4/4 Vítor Avelino <vito...@gmail.com>:

--
Arthur Gouveia.

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Maurício Linhares  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:38
De: "Maurício Linhares" <mauricio.linha...@gmail.com>
Data: Fri, 4 Apr 2008 11:38:06 -0300
Local: Sex 4 abr 2008 11:38
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator
Ainda bem, que continue assim :)

Mas o ideal mesmo era fazer como o Joshua falou e implementar os
métodos equals() e hashCode() nos seus objetos, se é que você ainda se
lembra do porque de fazer isso =P

2008/4/4 Arthur Gouveia <arthur.gouv...@gmail.com>:

> É que eu gostaria de deixar apenas 1 return por método...

--
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
João Pessoa, PB, +55 83 8867-7208

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Clovis Leoncio Junior  
Ver perfil   Traduzir para Traduzido (ver original)
 Mais opções 4 abr 2008, 11:39
De: "Clovis Leoncio Junior" <clovisleon...@gmail.com>
Data: Fri, 4 Apr 2008 11:39:40 -0300
Local: Sex 4 abr 2008 11:39
Assunto: Re: [PBJUG] Re: Dúvida com remoção em um HashSet usando Iterator

Se você implementar equals e hashCode ainda vai poder usar o contains da
coleção. Utilizando apenas um return por método e ainda utilizando
sobrecarga de métodos poderia ficar assim:

    public boolean remover(Produto produto) {
       return lprodutos.remove(produto);
    }

    public boolean remover(Usuario usuario) {
         return lusuarios.remove(usuario);
    }

    public boolean existe(Usuario usuario) {
         return lusuarios.contains(usuario);
    }

    public boolean existe(Produto produto) {
         return lprodutos.contains(produto);
    }

    Mas ao contrário do Maurício eu acho que um return por método em casos
como esse complica em vez de ajudar.

2008/4/4 Maurício Linhares <mauricio.linha...@gmail.com>:

--
Clovis Leoncio Junior

    Responder ao autor    Encaminhar  
É necessário Acessar antes de postar mensagens.
Para postar uma mensagem você precisa primeiro participar deste grupo.
Atualize seu apelido na página de configurações da inscrição antes de postar.
Você não tem a permissão necessária para postar.
Mensagens 1 - 25 de 60   Recentes >
« Voltar às Discussões « Tópico recente     Tópico antigo »

Criar um grupo - Grupos do Google - Página inicial do Google - Termos de Uso - Política de Privacidade
©2009 Google