Introdução comparável
Comparável é a interface de classificação.
Se uma classe implementa a interface comparável, significa "esta classe suporta a classificação". Como as classes que implementam a classificação de suporte à interface comparável, assumindo que agora existe uma "lista de lista (ou matriz) de objetos de classes que implementam interface comparável", a lista de lista (ou matriz) pode ser classificada por coleções.Sort (ou Arrays.Sort).
Além disso, "Objeto da classe que implementa a interface comparável" pode ser usada como uma chave no "mapa ordenado (como o Treemap)" ou um elemento no "conjunto ordenado (TreeSet)" sem especificar um comparador.
1. Comparador e comparável são os mesmos
São todas interfaces de Java e são usadas para comparar tamanhos de classes personalizadas.
O que é uma classe personalizada: como a classe pública Pessoa {Nome da String; Int Age}.
Quando temos uma pessoa tão pessoal, que contém Person1, Person2, Person3 ......, usamos coleções.sort (PersonList),
O resultado esperado não é obtido. Alguém deve perguntar neste momento, por que podemos classificar uma lista de string:
Por exemplo, StringList {"hello1", "hello3", "hello2"}, coleções.sort (stringlist) pode obter a classificação correta, isso é porque
O objeto String nos ajudou a implementar a interface comparável; portanto, se nossa pessoa quiser classificar, também precisamos implementar um comparador.
2. A diferença entre comparador e comparável
Comparável
Comparável é definido dentro da classe Pessoa:
public classe PESSION implementa comparável {..compare o tamanho da pessoa ...},
Como o comparador foi implementado, nossa pessoa agora é um objeto que pode comparar tamanhos. Sua função de comparação é exatamente a mesma que a string e pode ser comparada a qualquer momento e em qualquer lugar, porque a pessoa agora tem um tamanho diferente. Coleções.Sort (PersonList) pode obter o resultado correto.
Comparador
O comparador é definido fora da pessoa. Neste momento, a estrutura da nossa classe de pessoa não precisa alterar nenhuma alteração, como
public class Pessoa {Nome da String; Int Age},Então definimos outro comparador:
Public PersonComParator implementa comparador () {..compare o tamanho da pessoa ...}, Como comparar os tamanhos de duas pessoas em comparador de pessoas. Então, usando este método, quando queremos classificar uma pessoa,
Além de aprovar o PERSOLLIST, também precisamos passar pelo Pessoal Comparador, porque como comparar o tamanho da pessoa é em conformidade com o pessoal
Implementado em, como:
Coleções.sort (PersonList, New PersonComParator ()).
3. Exemplos de comparador e comparável
Comparável:
Para implementar a interface comparável, você deve substituir o método compareto. Implementar a comparação no método compareto:
public class Pessoa implementa comparável {Nome da String; int Age; public int compare (pessoa outra pessoa) {int i = 0; i = name.compareto (outro.name); // Comparação usando strings if (i == 0) {// Se os nomes forem iguais, compare a idade, a idade de retorno da idade de retorno da idade - outro.age;} else {return i; // Os nomes são diferentes, retorne o resultado da comparação de nomes.}}}Neste momento, podemos classificá -lo diretamente com as coleções.Sort (PersonList).
Comparador:
A implementação do comparador requer substituição do método de comparação:
classe pública Pessoa {Nome da String; Int Age;} classe PersonComParator implementa o comparador <Son Pessoa> {public int Compare (pessoa uma, pessoa outra) {int i = 0; i = One.name.compareto (outro.name); // comparação usando strings if (i == 0) {// Se o nome for o mesmo, compare a idade, retorne o resultado da comparação de retorno de idade um.age - outro.age;} else {return i; // Os nomes são diferentes, retornam o resultado da comparação de nomes.}}} Coleções.sort (PERSOLLIST, NOVA PESSOOMPARATOR ()) Ele pode ser classificado4: Resumo
Ambos os métodos têm suas próprias vantagens e desvantagens. É simples usar comparável. Enquanto o objeto que implementa a interface comparável se tornar um objeto comparável,
No entanto, o código -fonte precisa ser modificado. A vantagem de usar o comparador é que ele não precisa modificar o código -fonte, mas também implementa um comparador. Quando um objeto personalizado precisa ser comparado, o comparador e o objeto podem ser transmitidos juntos para comparar o tamanho. No comparador, os usuários podem implementar a lógica complexa e geral por si só, para que possam corresponder a alguns objetos relativamente simples, o que pode economizar muito trabalho repetitivo.