Carrinho de compras e equals!

Pessoal, estou fazendo um carrinho de compra básico, o cara descreve o pedido, e vai para a área onde coloca os itens, até aí não houve nenhum consulta no banco nem nada, eu simplesmente tornei meu bean Pedido Transiente, ou seja, instanciei ele.
dentro da classe pedido eu estou usando um List para agrupar os itens da classe PedidoItens. Porém, acontece um problema simples!! O cara coloca no carrinho coca, o item coca é guardado no List, depois se o cara colocar no carrinho coca denovo, guarda duas cocas!! Acontece que isso é errado! Eu queria fazer com que o List não aceitasse dois registros de coca se eles já existisse.
Andei pesquisando e parece que tenho que usar equals e talvez serialização também, estou sem saber o que fazer para isso não ocorrer.
Alguém tem alguma idéia? com Set é melhor de fazer isso?

Grato pela atenção!

Troca o List por Set. Um Set não permite instancias repetidas. Para saber se duas instancias são iguais o Set usa o método equals(), portanto não esqueça de implementar equals() para sua classe Item. Se você tiver um codigo (id) para cada item, pode simplesmente verificar este campo, na maioria das vezes já é suficiente.

valeu cassio!!
Não sei se vc lembra vc já me ajudou algumas vezes e antes eu nem sabia o que era transiente!! Apesar de utilizar sabe, tive que dar uma lida na teoria!!!
rsrs, depois disso estou melhorando! Valeu pela dica!

você deve mudar de arraylist para collection hashset este tipo de coleção nao aceita elementos duplicados

Só mais uma pergunta, quando eu for usar equals e item, eu tenho que implementar serialização? Tenho também que pegar apenas itens persistentes, ou podem ser trasientes mesmo?

[quote=ThiagoWorldCoder]Só mais uma pergunta, quando eu for usar equals e item, eu tenho que implementar serialização? Tenho também que pegar apenas itens persistentes, ou podem ser trasientes mesmo?
[/quote]

O equals() não tem absolutamente nada haver com serialização ou com estado do objeto em relação ao banco de dados. Neste caso, quem tem que tomar cuidado é você para definir bem quais atributos utilizar no equals.

ok valeu!

Eu vou ter que usar um for pra verificar um item com os outros do set?

No caso de um carrinho de compras, use LinkedHashMap ou LinkedHashSet em vez de HashMap ou HashSet.
É que é estranho se você acrescentar coisas em um carrinho e elas forem listadas fora da ordem em que foram acrescentadas (como é o caso do HashMap ou HashSet).

valeu pela dica brother “LinkedHashSet”. Você sabe se vou precisar usar um for pra verificar se os elementos são iguais no set?

Não precisa de for, basta tentar adicionar. Se o Set encontrar uma instância repetida, o método add() retorna false e ele não adiciona o objeto no conjunto. Se o elemento ainda não existir no conjunto, ele adiciona e retorna true. Isso tudo ele faz sozinho.

Eu fiz com um for e funcionou! Desculpe ficar insistindo, mas tem uma coisa que eu ainda não entendi… como vou usar o equals ali? Ele é criado dentro da classe, então seria por exemplo: item.equals(o que?)?
eu vou comparar ele com a o set? É isso que eu não tô entendendo!
desculpe a pergunta boba!

Não precisa de for, basta tentar adicionar. Se o Set encontrar uma instância repetida, o método add() retorna false e ele não adiciona o objeto no conjunto. Se o elemento ainda não existir no conjunto, ele adiciona e retorna true. Isso tudo ele faz sozinho.[/quote]
acho que a logica de um carrinho de compras deveria ser:
1- adiciono o produto, por exemplo coca cola.
2 - tentoi adicionar outra coca cola
3 - verifico se ja possuo, caso sim, incremento a quantidade.

[]´s

deu certo!!! Foi mal as perguntas idiotas, só de adicionar ele verifica mesmo!

Implemente o hashCode() também. Vai ajudar na pesquisa.