ArrayList Elementos

5 respostas
A

olá , estou com um problema:

Tenho uma ArrayList e preciso retornar o elemento que mais se repeti nesta lista. Retornar um String ou seja o nome dele aqui no meu caso.

Bom . sei q não está muito claro a dúvida mas vamos tentar…

vleu

5 Respostas

T

Você poderia usar um Map<String, Integer> (eu suponho que os elementos sejam do tipo String).

Esse mapa deve ter como chave o elemento e como valor a contagem desses elementos.

Por exemplo, digamos que você tivesse as strings "luis", "luis", "carlos", "carlos", "carlos", "maria".
Ao final da inserção no mapa, você deveria ter algo como:

"luis" -> 2
"carlos" -> 3
"maria" -> 1

A seguir, você deveria percorrer o mapa e ver qual dos elementos contém a maior contagem.

jimmyhc

Crie dois for’s

Compare cada posição do primeiro com o segundo.

Quando for igual vc soma em uma variavel… Ai é só contralar o contator de repetições.

Conseguiu entender ?

julianoeustaquio

Segue um exemplo.

public static void main(String... a){
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        
        String nomesEntrada = "teste2,teste1,teste1,teste2,teste2,teste3,teste4,teste1,teste1";
        
        StringTokenizer token = new StringTokenizer(nomesEntrada,",");
        
        String nomeApoio = null;        
        
        while(token.hasMoreTokens()){
            nomeApoio = token.nextToken();
            
            //ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS
            if( hm.get(nomeApoio) != null ){
                hm.put(nomeApoio,hm.get(nomeApoio)+1);
                
            }else{
                hm.put(nomeApoio,1);
            }
            
        }
        
        
        Integer valorMaximo = 0;
        String nomeSaida = null;
        
        token = new StringTokenizer(nomesEntrada,",");
        while(token.hasMoreTokens()){
            nomeApoio = token.nextToken();
            
            //VERIFICA QUAL É O QUE TEM MAIOR VALOR SIGNIFICATIVO
            if(hm.get(nomeApoio) > valorMaximo ){
                valorMaximo = hm.get(nomeApoio);
                nomeSaida = nomeApoio;
                
            }
            
        }
        
        System.out.println(nomeSaida);
        
        
    }
A

public String getMaiorVencedorCasa(){ ArrayList<Partida> vencedoresCasa = new ArrayList<Partida>(); for(Partida p : partidas) if(p.getVencedor() == true) vencedoresCasa.add(p); for(int i = 0; i < vencedoresCasa.size(); i++) vencedoresCasa.get(i).getMandante() ;

Primeiramente tenho um ArrayList partidas, algums elementos desta lista foram adicionadas em outra ArrayList chamada VencedoresCasa.
o que eu quero fazer é pegar o elemento q mais se repete dentro do ArrayList VencedoresCasa

Só que eu preciso retornar apenas um atributo desta lista que é o nome, então estou usando o getMandante()

entendeu?
como faço?

julianoeustaquio

Primeiro você terá

-   um loop para contar quantas vezes cada elemento se repete
-   um loop para descobrir qual é o que mais ganhou

Você terá que criar uma forma de realizar esta tarefa sugiro o HashMap.

Você pode adaptar o meu exemplo e ao invés

while(token.hasMoreTokens()){  
         nomeApoio = token.nextToken();  
           
         //ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS  
         if( hm.get(nomeApoio) != null ){  
             hm.put(nomeApoio,hm.get(nomeApoio)+1);  
               
         }else{  
             hm.put(nomeApoio,1);  
         }  
           
     }

para

for(int i = 0; i < vencedoresCasa.size(); i++)    {  

           
         //ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS  
         if( hm.get(vencedoresCasa.get(i).getMandante() ) != null ){  
             hm.put(vencedoresCasa.get(i).getMandante() ,hm.get(vencedoresCasa.get(i).getMandante() )+1);  
               
         }else{  
             hm.put(vencedoresCasa.get(i).getMandante() ,1);  
         }  
           
     }
Criado 12 de novembro de 2008
Ultima resposta 12 de nov. de 2008
Respostas 5
Participantes 4