Eu já vi classes que implementam o Comparable e o Comparator . O que isto significa? Por que eu usaria um sobre o outro?
java
comparator
comparable
Nick Heiner
fonte
fonte
Respostas:
O texto abaixo é de Comparador x Comparável
Comparável
Um objeto comparável é capaz de se comparar com outro objeto. A própria classe deve implementar a
java.lang.Comparable
interface para poder comparar suas instâncias.Comparador
Um objeto comparador é capaz de comparar dois objetos diferentes. A classe não está comparando suas instâncias, mas algumas instâncias de outras classes. Essa classe comparadora deve implementar a
java.util.Comparator
interface.fonte
Implementar
Comparable
significa " Eu posso me comparar com outro objeto " . Isso geralmente é útil quando há uma única comparação padrão natural.Implementar
Comparator
significa " Eu posso comparar dois outros objetos " . Isso geralmente é útil quando existem várias maneiras de comparar duas instâncias de um tipo - por exemplo, você pode comparar pessoas por idade, nome etc.fonte
Person
implementandoComparable
, porque não pode mudar como duas pessoas são comparadas.Person
. 2) O comparador, por exemplo,PersonAgeComparator
que é capaz de comparar duas entidades diferentes e decidir quais devem vir em primeiro lugar nessa ordem de classificação específica. 3) O código de classificação, que pega uma coleção de entidades e um comparador e classifica essa coleção usando o comparador para determinar a ordem.Comparable permite que uma classe implemente sua própria comparação:
Por comparação, o Comparator é uma comparação externa:
Nas duas implementações, você ainda pode escolher o que deseja comparar . Com os genéricos, você pode declarar isso e verificá-lo no momento da compilação. Isso melhora a segurança, mas também é um desafio determinar o valor apropriado.
Como orientação, geralmente uso a classe ou interface mais geral com a qual esse objeto pode ser comparado, em todos os casos de uso que imagino ... Uma definição não muito precisa! :-(
Comparable<Object>
permite usá-lo em todos os códigos em tempo de compilação (o que é bom, se necessário, ou ruim, se não, e você perde o erro em tempo de compilação); sua implementação precisa lidar com objetos e transmitir conforme necessário, mas de maneira robusta.Comparable<Itself>
é muito rigoroso, pelo contrário.fonte
java.lang.Comparable
Para implementar a
Comparable
interface, a classe deve implementar um único métodocompareTo()
int a.compareTo(b)
Você deve modificar a classe cuja instância você deseja classificar. Para que apenas uma sequência de classificação possa ser criada por classe.
java.util.Comparator
Para implementar a interface Comparator, a classe deve implementar um único método
compare()
int compare (a,b)
fonte
Comparable
é para fornecer uma ordem padrão para objetos de dados, por exemplo, se os objetos de dados tiverem uma ordem natural.A
Comparator
representa a própria ordem para um uso específico.fonte
Comparable
é geralmente preferido. Mas, às vezes, uma classe já é implementadaComparable
, mas você deseja classificar em uma propriedade diferente. Então você é forçado a usar umComparator
.Algumas classes realmente fornecem
Comparators
casos comuns; por exemplo,String
s diferenciam maiúsculas de minúsculas quando classificados, mas também há uma estáticaComparator
chamadaCASE_INSENSITIVE_ORDER
.fonte
Aqui estão algumas diferenças entre o comparador e o comparável que encontrei na web:
Se você perceber que a diferença lógica entre esses dois é o Comparator em Java, compare dois objetos fornecidos a ele, enquanto a interface Comparable compara a referência "this" com o objeto especificado.
Comparável em Java é usado para implementar a ordenação natural do objeto. Na Java API String, as classes Date e wrapper implementam a interface Comparable.
Se alguma classe implementar a interface Comparable em Java, a coleção desse objeto List ou Array poderá ser classificada automaticamente usando o método Collections.sort () ou Array.sort () e o objeto será classificado com base na ordem natural definida pelo método CompareTo.
Objetos que implementam Comparable em Java podem ser usados como chaves em um mapa classificado ou em elementos em um conjunto classificado, por exemplo, TreeSet, sem especificar nenhum Comparador.
site: Como usar o Comparator e o Comparable em Java? Com exemplo
Leia mais: Como usar o Comparator e o Comparable em Java? Com exemplo
fonte
Comparable
é para objetos com uma ordem natural. O próprio objeto sabe como deve ser pedido.Comparator
é para objetos sem uma ordem natural ou quando você deseja usar uma ordem diferente.fonte
Diferença entre as interfaces Comparador e Comparável
Comparable
é usado para se comparar usando outro objeto.Comparator
é usado para comparar dois tipos de dados são objetos.fonte
Se você perceber que a diferença lógica entre esses dois está
Comparator
em Java, compare dois objetos fornecidos a ele, enquanto aComparable
interface compara a referência "this" com o objeto especificado.Comparable
em Java é usado para implementar a ordenação natural do objeto. Na Java API String, as classes Date e wrapper implementam aComparable
interface.Se alguma classe implementar
Comparable
interface em Java, a coleção desse objeto seráList
ouArray
poderá ser classificada automaticamente usando o métodoCollections.sort()
ouArray.sort()
, e o objeto será classificado com base na ordem natural definida pelocompareTo
método.Objetos implementados
Comparable
em Java podem ser usados como chaves em um mapa classificado ou elementos em um conjunto classificado, por exemploTreeSet
, sem especificar nenhumComparator
.fonte
Minha anotação lib para implementar Comparable e Comparator:
Clique no link para ver mais exemplos. compamatic
fonte