declaramos o array usando genericos,que nada mais e que colocando entre os espacos, < (menor que) e >(maior que) o tipo dos elementos que que serao armazendos na lista.Ao inserirmos todos os elemenos, imprimimos a lista e vemos que elase encontra totalmente fora da ordem alfabetica. Utilizamos aclasse Collectionsque possui varias utilidades dentreelas o metodo sort( ),para realizar este trabalhopra gente. Imprimirmosmais uma vez nossa lista para constatara nova da nossa lista.InterfaceComparable Jasabemos que em caso de um conjunto de texto ou numerais (valoresprimitivos), poderemos usar as utilidades de Collections mas e sequisermos classificar uma lista de objetos? Vamos supor que queremosconstuir uma aplicacao onde temos cadastros de campeonatos enecessitaremos classificar uma lista de surfistas em ordemalfabetica. Vamos por parte entao e definir como seria a classeSurfista.javapublicclassSurfista { Stringnome; Stringapelido; intidade; intid; publicSurfista() { } publicSurfista(String nome,String apelido,intidade,intid){ setId(id); setApelido(apelido); setIdade(idade); setNome(nome); } //getterse setters,construtores...abaixo Criamosa classe surfista e dois construtores para facilitar a nossainstanciacao e ainda o metodo mockSurfistas() queretorna uma lista de surfistas para facilitar nosso desenvolvimentode agora em diante.publicstaticList<Surfista> mockSurfistas() { List<Surfista>toReturn= newArrayList<Surfista>(); toReturn.add(newSurfista("GabrielMedina","Medina",19, 1)); toReturn.add(newSurfista("MiguelPupo","Dropador",21, 2)); toReturn.add(newSurfista("AdrianoSouza","Rasgador",26, 3)); toReturn.add(newSurfista("RaoneMonteiro","Monteiro",30, 4)); toReturn.add(newSurfista("AlejoMuniz","novato",23, 5)); toReturn.add(newSurfista("FelipeToledo","cacula",18, 6)); returntoReturn;} Agorapensamos que esta tudo muito bom, tudo muito bem e decidimos ordenarnossa lista de surfista da seguinte forma abaixo: List<Surfista>surfistas =newArrayList<Surfista>(); surfistas= Surfista.mockSurfistas();//carrega listasdesurfistas System.out.println(surfistas);//imprime listasdesurfistas Collections.sort(surfistas);//tenta ordenar listasdesurfistas System.out.println(surfistas);//imprime listasdesurfistasExecutamose nos deparamos com o seguinte erro:Exceptionin thread "main" java.lang.Error: Unresolved compilationproblems: Boundmismatch: The generic method sort(List<T>) of type Collectionsis not applicable for the arguments (List<Surfista>). Theinferred type Surfista is not a valid substitute for the boundedparameter <T extends Comparable<? super T>> Themethod sort(List<T>, Comparator<? super T>) in the typeCollections is not applicable for the arguments (List<Surfista>,Surfista) atbr.com.blog.gmachado1.genericos.TestandoArrayList.main(TestandoArrayList.java:48) Seestivermos usando uma IDE (eclipse, NetBeans...) ja sera possivelver o erro antes mesmo de tentarmos rodar a aplicacao enao e preciso ser um genio para saber o que pode ser. Comoestamos definindoacima qual atributo de surfista sera pego para ser ordenado? Eai que entra a classe Comparable. <o/ Vimosno primeiro exemplo de classificacao, que o metodo sort()da classe Collections esobrecarregado e algumasdas varias formase da seguinte forma sort(List<T> list):void - Collecions. Entaoos mais aflitos perguntariamse e precisocriar uma lista de Comparable passaros valores da lista atual para a lista comparable e depois ordena-lapara voltar a lista de ArrauList? Epor ai, mas gracas a OO tudo fica mais simples. Uma vez quesabemos que uma classe que implementa uma interface, entra norelacionamento E-UM, se pegarmos nossa classe Surfista eimplementarmos a interface Comparable, japodemos dizer que estamos nos referindo a uma lista de Comparablecorreto? Porsua vez, esta classe possui ometodo compareTo(SuaClasse t) quedevera ser implementado etudo estara solucionado. Ometodo implementado retorna sempre um inteiro onde:: Se <instanciaA> for menor que <instanciaB>, retornara um inteiro negativo; Se <instanciaA> for maior que <instanciaB>, retornara um inteiro positivo; Se <instanciaA> for igual <instanciaB>, retornara zero; Pegamosnossa classe Surfista e a alteramos na seguinte forma:publicclassSurfista implementsComparable<Surfista>{ Stringnome; Stringapelido; intidade; intid;//getterse setters abaixo publicSurfista(String nome,String apelido,intidade,intid){ setId(id); setApelido(apelido); setIdade(idade); setNome(nome); } publicSurfista() {} @Override//parao compiladorsaber queestasobrecarregandoBoaspraticas publicintcompareTo(Surfista o){ returnnome.compareTo(o.getNome()); } Agoraao executarmos o caso acima nos deparamos com as seguintes saidas:[br.com.blog.gmachado1.model.Surfista@4d8,br.com.blog.gmachado1.model.Surfista@4f7,br.com.blog.gmachado1.model.Surfista@5d0,br.com.blog.gmachado1.model.Surfista@66b,br.com.blog.gmachado1.model.Surfista@4f7,br.com.blog.gmachado1.model.Surfista@49a][br.com.blog.gmachado1.model.Surfista@5d0,br.com.blog.gmachado1.model.Surfista@4f7,br.com.blog.gmachado1.model.Surfista@49a,br.com.blog.gmachado1.model.Surfista@4d8,br.com.blog.gmachado1.model.Surfista@4f7,br.com.blog.gmachado1.model.Surfista@66b] Entendeualguma coisa?