Arrays.sort (t [], comparador <? Super t> c) O método é usado para classificar as matrizes de objetos por regras definidas pelo usuário.
A documentação Java oficial descreve apenas brevemente o papel desse método e não o apresenta em detalhes. Este artigo analisará esse método em profundidade.
1. Exemplo simples
O método de uso da classificação é muito simples e claro. No exemplo a seguir, primeiro defina um comparador que compara o tamanho do cão e depois passe seu objeto de instância como um parâmetro para o método de classificação. Através deste exemplo, você poderá dominar rapidamente o uso de Arrays.sort ().
importar java.util.arrays; importar java.util.comparator; classe cão {int size; public cão (int s) {size = s;}} classe cãesizecomparator implementa o comparador <dog> {@substituir public int compare (cão o1, cão o2) {Return o1.size - o2.size; d1 = novo cachorro (2); cachorro d2 = novo cachorro (1); cão d3 = novo cachorro (3); cachorro [] dogary = {d1, d2, d3}; cães printdd (dogarray); arrays.sort (dogarray, cães stain (cães de cães (impressão); cães (cães); System.out.print (D.Size + ""); System.out.println ();}}A saída é:
2 1 3 1 2 3
2. Use o modo de política
Este é um exemplo perfeito e conciso do padrão de estratégia. Vale ressaltar por que o modelo de estratégia é adequado para uso nesse cenário.
De um modo geral, o padrão de política permite que diferentes algoritmos sejam selecionados quando o programa é executado. Por exemplo, ao classificar, diferentes comparadores são transmitidos e diferentes algoritmos são usados.
De acordo com o exemplo acima, suponha que você queira classificar com o peso do cachorro, você pode criar um novo comparador a ser classificado como abaixo:
classe DOG {int tamanho; int peso; Public Dog (int s, int w) {size = s; peso = w;}} classe DogsizEComParator implementa comparador <dog> {@substituir public int compare (cão o1, cão o2) {Return o1.size - o2.size;}}}} cãeta -peso -fúrio) {Return Comparator <size - DOGSIDE; o1.weight - o2.weight;}} public class Arraysort {public static void main (string [] args) {cão d1 = novo cachorro (2, 50); cachorro d2 = novo cachorro (1, 30); cão d3 = novo cão (3, 40); cachorro dogArray = {d1); DogsizEComParator ()); PrintDogs (DOGArray); Arrays.sort (DOGARRAY, NOVO DOGWELTCOMPARADOR ()); PrintDogs (DOGArray);} public static void PrintDogs (cães [] cães) {para (cães d: cães). "); System.out.println ();}}Resultados da execução:
Tamanho = 2 Peso = 50 Tamanho = 1 Peso = 30 Tamanho = 3 Peso = 40 Tamanho = 1 Peso = 30 Tamanho = 2 Peso = 50 Tamanho = 3 Peso = 40 Tamanho = 1 Peso = 30 Tamanho = 3 Peso = 40 Tamanho = 2 Peso = 50
O comparador é uma interface, portanto, o método de classificação pode passar em qualquer classe que implemente essa interface, que é a principal idéia do padrão de política.
3. Por que usar "super"
É fácil entender se você usa "Comparador <T> C", mas o <? Supert> no segundo parâmetro de classificação significa que o tipo aceito pelo comparador pode ser t ou sua superclasse. Por que é uma superclasse? A resposta é: isso permite a comparação de diferentes objetos de subclasse usando o mesmo comparador. Isso é claramente demonstrado no exemplo a seguir:
importar java.util.arrays; importar java.util.comparator; classe animal {int size;} classe cão estende Animal {public Dog (int s) {size = s;}} classe Cat estende o animal {public Cat (int s) {size = s; O2.Size;} // Dessa maneira, todas as subsses de animais podem usar esse comparador.} public classe ArraySort {public static void main (string [] args) {cão d1 = novo cachorro (2); cachorro d2 = novo cão (1); cachorro d3 = novo cachorro (3); cachorro [] dogarray = {d1, d2, d2, d3}; PrintDogs (DOGArray); Arrays.sort (DOGARRAY, NEW ANDORNALSIZECOMPARATOR ()); PrintDogs (DOGARRAY); System.out.println (); // Quando você tem uma variedade de gatos, o mesmo comparador pode ser usado. CAT C1 = novo Cat (2); CAT C2 = novo CAT (1); CAT C3 = novo CAT (3); CAT [] Catarray = {C1, C2, C3}; PrintDogs (Catarray); Arrays.Sort (Catarray, Public Stain, Public Stain (Animalizeparator (); System.out.print ("size =" + a.size + ""); system.out.println ();}}Resultado da saída:
tamanho = 2 tamanho = 1 tamanho = 3 tamanho = 1 tamanho = 2 tamanho = 3 tamanho = 3 tamanho = 2 tamanho = 1 tamanho = 3 tamanho = 1 tamanho = 2 tamanho = 3
4. Resumo
As informações relacionadas a Arrays.sort () estão resumidas da seguinte forma:
Geral: Padrão de design de estratégia de super classe;
Mesclar classificação: complexidade do tempo n*log (n);
Java.util.Collections#Sort (lista <T> Lista, Comparador <? Super T> C) Usa uma idéia semelhante ao Arrays.sort.
Resumir
O exposto acima é toda a explicação detalhada do código ARRAYS.SORT () em Java. Espero que seja útil para todos. Os amigos interessados podem continuar se referindo a outros tópicos relacionados a Java neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!