Quando deve uma classe ser comparáveis ??e / ou Comparador? [fechadas]
-
10-07-2019 - |
Pergunta
Eu vi classes que implementam tanto Comparable e Comparator . O que isto significa? Por que eu iria usar um sobre o outro?
Solução
O texto abaixo vem Comparador vs Comparable
Comparable
Um objecto comparável é capaz de comparar-se com um outro objecto. A classe em si deve implementa a interface java.lang.Comparable
, a fim de ser capaz de comparar suas instâncias.
Comparator
Um objecto de comparação é capaz de comparar dois objectos diferentes. A classe não está comparando as suas instâncias, mas instâncias de alguma outra classe. Esta classe de comparação deve implementar a interface java.util.Comparator
.
Outras dicas
A implementação de meios Comparable
" eu posso me comparar com outro objeto. " Isto é tipicamente útil quando há uma única comparação padrão natural.
A implementação de meios Comparator
" eu posso comparar dois outros objetos ." Isto é tipicamente útil quando existem várias maneiras de comparar duas instâncias de um tipo - por exemplo, Você poderia comparar as pessoas por idade, nome etc.
Comparável permite que uma classe implementar a sua própria comparação:
- está em da mesma classe (muitas vezes é uma vantagem)
- não pode ser apenas uma implementação (assim você não pode usar isso se você quiser dois casos diferentes)
Em comparação, a comparação é uma comparação externa:
- é normalmente em uma instância única (seja na mesma classe ou em outro lugar)
- você nome de cada implementação com a maneira que você quer resolver as coisas
- você pode fornecer comparadores para classes que você não controla
- a implementação é utilizável mesmo se o primeiro objeto é nulo
Em ambas as implementações, você ainda pode escolher o que você quer ser comparado . Com os genéricos, você pode declarar isso, e tê-lo verificado em tempo de compilação. Isso melhora a segurança, mas também é um desafio para determinar o valor apropriado.
Como orientação, eu geralmente uso da classe geral mais ou interface para que esse objeto poderia ser comparado, em todos os casos de uso Imagino ... Não muito preciso uma definição embora! : - (
-
Comparable<Object>
permite usá-lo em todos os códigos em tempo de compilação (que é bom, se necessário, ou ruim, se não e você perder o erro em tempo de compilação); sua implementação tem de lidar com objetos e elenco como necessário, mas de uma forma robusta. -
Comparable<Itself>
é muito rigoroso, pelo contrário.
Engraçado, quando você subclasse-se a subclasse, subclasse também deve ser comparáveis ??e robusta sobre ele (ou ela iria quebrar Liskov Princípio, e dar-lhe tempo de execução erros).
java.lang.Comparable
-
Para implementar a interface
Comparable
, classe deve implementar um método únicocompareTo()
int a.compareTo(b)
-
Você deve modificar a classe cuja instância que você deseja classificar. De modo que apenas uma sequência de ordenação pode ser criado por classe.
java.util.Comparator
-
Para implementar a interface Comparator, classe deve implementar um método único
compare()
int compare (a,b)
- Você constrói uma classe separada da classe cujo exemplo você deseja classificar. Assim que a seqüência tipo múltipla pode ser criada por classe.
Comparable
é para fornecer uma ordenação padrão em objetos de dados, por exemplo, se os objetos de dados tem uma ordem natural.
A Comparator
representa a própria ordenação para um uso específico.
Comparable
é geralmente preferido. Mas às vezes uma classe já implementa Comparable
, mas você deseja classificar em uma propriedade diferente. Em seguida, você é forçado a usar um Comparator
.
Algumas classes realmente fornecer Comparators
para casos comuns; por exemplo, String
s são por caso padrão sensível a quando ordenados, mas há também uma Comparator
estática chamada CASE_INSENSITIVE_ORDER
.
aqui estão algumas diferenças entre Comparador e eu Comparável encontrado na web:
-
Se você vê diferença, então lógica entre estes dois é Comparador em Java comparar dois objetos fornecidos a ele, enquanto interface Comparable compara "isto" de referência com o objeto especificado.
-
Comparável em Java é usado para implementar ordenação natural do objeto. Em Java API String, Data e classes de mensagens publicitárias implementar a interface Comparable.
-
Se qualquer classe implementar a interface Comparable em Java, em seguida, coleção de esse objeto seja List ou Array pode ser resolvido automaticamente usando Collections.sort () ou Array.sort () e objeto serão classificados com base em não naturais ordem definida pelo método CompareTo.
-
Objetos que implementam Comparável em Java podem ser usadas como chaves em um mapa ordenado ou elementos de um conjunto ordenado por exemplo TreeSet, sem especificar qualquer comparação.
Site: Como usar Comparador e comparáveis ??em Java? Com exemplo
Leia mais: Como usar Comparador e no Comparável Java? Com exemplo
Comparable
é para objetos com uma ordem natural. O objeto em si sabe como é ser encomendados.
Comparator
é para objetos sem uma ordenação natural ou quando você quiser usar uma ordem diferente.
Diferença entre Comparador e as interfaces comparáveis ??
Comparable
é usado para comparar-se usando com outro objeto.
Comparator
é usado para comparar dois tipos de dados são objetos.
Se você vê diferença, então lógica entre estes dois é Comparator
em Java comparar dois objetos fornecidos a ele, enquanto interface de Comparable
compara "isto" de referência com o objeto especificado.
Comparable
em Java é usado para implementar ordenação natural do objeto. Em Java API String, Data e classes de mensagens publicitárias implementar a interface Comparable
.
Se qualquer classe implementar a interface Comparable
em Java, em seguida, coleção de esse objeto seja List
ou Array
podem ser classificados automaticamente usando Collections.sort()
ou método Array.sort()
e objeto serão classificados com base em há ordem natural definido pelo método compareTo
.
Objetos que implementam Comparable
em Java podem ser usadas como chaves em um mapa ordenado ou elementos de um conjunto ordenado por exemplo TreeSet
, sem especificar qualquer Comparator
.
A minha anotação lib para implementar Comparable e Comparator:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
Clique no link para ver mais exemplos. compamatic