| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:06:57
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Boa tarde amigos, estou aqui mais uma vez precisando da ajuda daqueles que sabem mais que eu pra me tirar uma dúvida com um detalhe sobre o código abaixo:
A saída desse código é essa:
Entendi que tenho que sobrescrever equals() e hashCode() pra eliminar duplicidades e se quiser realizar classificação dos elementos tenho que implementar ou a interface Comparator ou Comparable, a dúvida é talvez boba, mas acho que não custa perguntar, pra definir o que vai ser exibido o programa percorre o mapa de baixo para cima e quando encontra um elemento duplicado descarta o anterior? Agradeço desde já pela ajuda. Só um detalhe, não estou usando genéricos, por isso as conversões nos métodos compare() e equals().
|
Entusiasta Java |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:10:12
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
Ele apaga o velho e coloca o novo. [=
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:15:33
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
1) Um TreeMap não usa nem hashCode nem equals, apenas compareTo (se a classe implementar Comparable) ou compare (se você passar um Comparator). Portanto, não adianta implementar hashCode ou equals nesse caso.
2) Se dois elementos que você quiser inserir em um TreeMap retornarem 0 no compareTo (ou compare), eles são considerados iguais, e isso quer dizer que o segundo elemento não será inserido ou o primeiro será sobreposto (não sei exatamente qual é o comportamento do TreeMap, na verdade).
Portanto, para evitar que você insira 5 elementos mas apenas 4 apareçam, deixe seu critério de comparação mais completo. Por exemplo, no seu caso, compare por número de quartos e então por cor (se o número de quartos for o mesmo):
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:15:38
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
jakefrog
Então minha interpretação está correta? Valeu pela resposta.
entanglement
Muito obrigado pela explicação, vou continuar treinando e estudando, mas essa explicação foi suficiente, abraço aos dois e mais uma vez obrigado por respostas tão rápidas.
Sobre a implementação de equals() e hashCode() na verdade eu quis dizer que eles estão sendo implementados na classe que é usada como chave no Map, e assim elas eliminam a duplicidade caso haja.
This message was edited 2 times. Last update was at 22/12/2011 15:20:42
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:28:04
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
entanglement, por curiosidade.
Um Map não precisa do HashCode e eq para eliminar itens repitidos não?
Basta o Comparator/Comparable que ele faria esse trabalho?
Estava lendo aqui e me esbarrei com esse texto: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html
Note that the ordering maintained by a sorted map (whether or not an explicit comparator is provided) must be consistent with equals if this sorted map is to correctly implement the Map interface. (See Comparable or Comparator for a precise definition of consistent with equals.) This is so because the Map interface is defined in terms of the equals operation, but a map performs all key comparisons using its compareTo (or compare) method, so two keys that are deemed equal by this method are, from the standpoint of the sorted map, equal. The behavior of a sorted map is well-defined even if its ordering is inconsistent with equals; it just fails to obey the general contract of the Map interface.
As vezes meu inglês me pega...
É sem ofensa tá? Eu não tenho vergonha de falar quando não sei ou tenho dúvidas.
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:33:53
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
hashCode e equals são usados apenas em um HashMap (e seus variantes, como LinkedHashMap ou ConcurrentHashMap.)
Um TreeMap usa apenas compare (ou compareTo) porque ele supõe que dois elementos são iguais quando compare ou compareTo retorna zero. Portanto, ele nem usa o método equals. Satisfeito?
Se tiver dúvidas, tente decifrar os fontes das classes java.util.TreeMap e java.util.HashMap que vêm com o JDK.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 15:41:24
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
jakefrog
O que ocorre é o seguinte, quando há ordenação natural, por exemplo quando é um Map de Strings, o equals() e hashCode() estão sobrescritos na classe String, na verdade eu acho que a descrição correta seria: para eliminar as duplicidades a classe que vai ser usada como chave no Map, no meu caso a classe Casa deve sobrescrever estes métodos, se não sobrescrever a classificação vai ocorrer, mas elementos repetidos serão inseridos, além é claro de implementar ou Comparable ou Comparator.
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 16:15:05
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
entanglement wrote:hashCode e equals são usados apenas em um HashMap (e seus variantes, como LinkedHashMap ou ConcurrentHashMap.)
Um TreeMap usa apenas compare (ou compareTo) porque ele supõe que dois elementos são iguais quando compare ou compareTo retorna zero. Portanto, ele nem usa o método equals. Satisfeito?
Se tiver dúvidas, tente decifrar os fontes das classes java.util.TreeMap e java.util.HashMap que vêm com o JDK.
Poxa, é assim que vc trata quem te pergunta numa boa? Eu só queria tirar dúvida pois quando fiz SCJP passei com 62% e ainda tenho algumas dúvidas quanto a isso, pois não é algo que uso muito no dia dia.
Desculpe se te incomodei, fica tranquilo que vou sair do seu caminho. [=
@sidney.tavares
Valeu cara, obrigado aí. [=
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 16:18:14
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Nem percebi que dei uma patada - deve ser porque sou do signo de Sagitário (que é um centauro, portanto é de certa forma um cavalo, ou seja, tão grosseiro quanto).
Eu só quis dizer que o TreeMap funciona desse jeito, e se precisar verificar por que é que ele é assim, pode-se olhar os fontes diretamente.
Não quis ser rude
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2011 16:22:27
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
entanglement
Cara, como você já respondeu algumas vezes pra mim e sempre ajudou eu meio que conheço o jeito que você responde e sei que não foi pra ofender ninguém...fiz o que você sugeriu e pra falar a verdade eu nem sabia que dava pra ver o código fonte dessas classes, ajudou bastante.
jakefrog
Precisando e eu podendo ajudar estamos aí, às vezes uma coisa que a gente lê parece agressiva mas não é, por isso prefiro falar, mas relaxa que o entanglement é gente boa, abraço.
|
Entusiasta Java |
|
|
 |
|
|
|
|