com uma lista ondevoce nao pretendeobter elementos repetidos,deve consideraras listas que implementem ainterface Set. Isto porque antes de realizar a insercao de umelemento em sua lista, todasas listas que implementam esta interface, percorerosmetodosdos elementos hasCode()e o metodo equals()e caso valide que o elementoesteja repetido,o mesmo naoira ser adicionado. TantoTreeSet, HashSet e LinkedHashSet possuem esta particularidadepor terem o relacionamento E-Um comSet. Logoqualquer uma destas listas possuem a mesma caracteristica quanto averificacao de um elemento antes de ser adicionado etodas devem ter seus metodos equals e hashCode bem elaborados.Entretanto, nem tudo sao flores, a utilizacao destaslistas para adicionar umacarga de muitos elementospodera ser custosa quantoao processamento entretando pode sermuito mais rapido em uma busca (levando em consideracao que seucodigo hashcode e eficiente) . Vejamosabaixo um exemplo de codigo de uma das listas que implementa Sets boolean[]ba= newboolean[5];//boolean array de5 elementos Set<Surfista>s= newHashSet<Surfista>(); ba[0]= s.add(Surfista.mockSurfistas().get(0)); ba[1]= s.add(Surfista.mockSurfistas().get(1)); ba[2]= s.add(Surfista.mockSurfistas().get(0));//repetindo ba[3]= s.add(Surfista.mockSurfistas().get(3)); ba[4]= s.add(Surfista.mockSurfistas().get(4)); for(inti=0;i<ba.length;i++){ System.out.println(ba[i]); } for(Objecto:s){ System.out.println(o); } System.out.println("#############TREE SET"); Set<Surfista>t= newTreeSet<Surfista>(); ba[0]= t.add(Surfista.mockSurfistas().get(0)); ba[1]= t.add(Surfista.mockSurfistas().get(1)); ba[2]= t.add(Surfista.mockSurfistas().get(0));//repetindo ba[3]= t.add(Surfista.mockSurfistas().get(3)); ba[4]= t.add(Surfista.mockSurfistas().get(4)); for(inti=0;i<ba.length;i++){ System.out.println(ba[i]); } for(Objecto:t){ System.out.println(o); } 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; }Saida:truetruefalsetruetrueSurfista[nome=Alejo Muniz , apelido=novato, idade=23]Surfista[nome=Raone Monteiro , apelido=Monteiro, idade=30]Surfista[nome=Miguel Pupo , apelido=Dropador, idade=21]Surfista[nome=Gabriel Medina , apelido=Medina, idade=19]#############TREE SETtruetruefalsetruetrueSurfista[nome=Alejo Muniz , apelido=novato, idade=23]Surfista[nome=Gabriel Medina , apelido=Medina, idade=19]Surfista[nome=Miguel Pupo , apelido=Dropador, idade=21]Surfista[nome=Raone Monteiro , apelido=Monteiro, idade=30] Valelembrar que a ordem pode nao coincidir conforme ocorreu no nossoexemplo, isto porque HashSet nem TreeSet que foram as classeutilizadas por aqui nao obedecem uma ordenacao padrao. Outraobservacao que devemos salientar e quanto a lista booleana ondevemos que em ambos os casos possue um item que possui valor falso pornao ter sido inserido na lista.UtilizandoMap Ocomportamento das listas que imeplementam a interface Map sao bemdiferentes das que vimos ate entao. Elas possuem uma mistura com oque vimos anteriormente, onde cria a necessidade de codificar seusmetodos hashCode( ) e equals( ) sobrescritos paratirar proveito das informacoes da lista e seus elementos casocontrario nao tera muita utilidade mas elas mapeiam suasentidades criando um identificador e o elemento... Tudofica mais facil demonstrando e e o que farei abaixo com esteexemplo declarando uma lista de Maps, veremos que ao adicionar cadaum dos elementos, realizamos buscas por cada elemento, imprimindoseus dados, mas o ultimo elemento Hauli que e da classedeclarada logo abaixo onde nao possui o metodo equals( ) ehashCode( ) nao e encontrada, demonstrando que oelemento retorna null por ficar perdido dentro da lista.classHauli {}publicclassClasseTeste{ publicstaticvoidmain(Stringar[]){ Map<Object,Object>ml= newHashMap<Object,Object>(); ml.put("t1",newSurfista("GustavoMachado","Gus",32,2)); ml.put("t2",Thread.MAX_PRIORITY); ml.put(Thread.MIN_PRIORITY,"Prioridademinima"); Surfistas= Surfista.mockSurfistas().get(0); ml.put(s,"Medina"); ml.put(3,"numeral3"); ml.put(newHauli(), "Hauli");//classesem equals e hasCode System.out.println(ml.get("t1")); Stringt2= "t2";//teste2 System.out.println(ml.get(t2)); intt=1;//Thread.MIN_PRIORITY System.out.println(ml.get(t)); System.out.println(ml.get(Thread.MIN_PRIORITY)); System.out.println(ml.get(s)); System.out.println(ml.size()); System.out.println(ml.get(newHauli()));//NULL }} Saida: Surfista[nome=Gustavo Machado , apelido=Gus, idade=32] 10 Prioridademinima Prioridademinima Medina 6 null Outrocaso que vale ser observado em uma lista de Map tambem, e colocaruma enumeracao (Enum) como chave do elemento. Aqui funcionoumas por motivos dos metodos equals( ) e hashCode( ) seremsobrescritos nos enums, pode nao ser seguro defini-los como chave.UtilizandoPriority Queue Estaclasse que e a mais diferene de todas as outras, entrou comofuncionalidade a partir da versao java 1.5. Ela tem sua ordenacaoe prioridade padrao