Exibir os 6 Números que mais se repetem em um ArrayList

7 respostas
java
E

Olá Pessoal. Tenho um algoritmo que conta quantas vezes um número se repete em um Array, mas agora quero exibir apenas os 6 números que mais repetem. Alguém tem alguma ideia?

Segue o código:

int vCont = 1;
int vNumeroRepetido = 0;

for(int i = 0; i < array.size(); i++) {
	vCont=0;
	vNumeroRepetido = 0;
	
	for(int j=0; j<array.size(); j++) {
		if (array.get(i) == array.get(j))
			vCont++;
		
		if (array.get(i) > array.get(j)) {
			vNumeroRepetido = array.get(i);
		}
	}
	
	System.out.println(" Numero que mais se Repetem " + vNumeroRepetido + ": " + vCont + " vezes");
}
}
}

Saída neste exemplo:

Número 0 repetiu: 11 vezes
Número 5 repetiu: 11 vezes
Número 31 repetiu: 5 vezes
Número 32 repetiu: 11 vezes
Número 37 repetiu: 9 vezes
Número 42 repetiu: 7 vezes
Número 14 repetiu: 9 vezes
Número 17 repetiu: 13 vezes
Número 36 repetiu: 10 vezes
Número 38 repetiu: 9 vezes
Número 44 repetiu: 10 vezes
Número 60 repetiu: 7 vezes
Número 3 repetiu: 13 vezes
Número 10 repetiu: 20 vezes
Número 17 repetiu: 13 vezes
Número 21 repetiu: 13 vezes
Número 22 repetiu: 11 vezes
Número 43 repetiu: 17 vezes
Número 0 repetiu: 11 vezes
Número 5 repetiu: 11 vezes
Número 23 repetiu: 16 vezes
Número 25 repetiu: 14 vezes
Número 28 repetiu: 14 vezes
Número 31 repetiu: 5 vezes
Número 11 repetiu: 11 vezes
Número 23 repetiu: 16 vezes
Número 24 repetiu: 11 vezes
Número 26 repetiu: 7 vezes
Número 40 repetiu: 12 vezes
Número 52 repetiu: 14 vezes
Número 18 repetiu: 11 vezes
Número 20 repetiu: 11 vezes
Número 30 repetiu: 12 vezes
Número 32 repetiu: 11 vezes
Número 33 repetiu: 14 vezes

7 Respostas

E

Alguém ?

E

vc pode fazer assim em Java 8

List<Integer> list = Arrays.asList(1, 1, 2, 4, 3, 7, 5, 5, 59, 7, 7, 9, 3, 12, 45, 78, 76, 13, 30, 3, 30, 40,
			15, 17, 15, 8, 9, 7, 4);

	list.stream()
		.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
		.entrySet().stream()
				   .sorted(Map.Entry.<Integer, Long>comparingByValue()
				   .reversed())
				   .limit(6)
				   .forEachOrdered(e -> System.out.println("Nº " + e.getKey() + " apareceu " + e.getValue()));
E

Não tem outra forma com o código que passei? pois da forma que me passou esta dando um monte de erro, não consigo postar o print do do erro

E

Eu rodei o código e funcionou normal … vc tá usando o java 8?

Com seu código dá também, é só usar a mesma ideia.
Vc agrupa, depois vc ordena. Dai vc faz um laço e coloca o contador até 6 …

E

Estou usando o java 8, estranho mesmo…
vc tem um exemplo para agrupar e ordenar?

R

Para fazer isso, você terá que guardar a quantidade de vezes que cada número se repete, pode utilizar um Map ou uma Matriz para fazer isso.
Após isso utilize um bubble sort ou qualquer outro algoritmo de ordenação fazendo com que ordene do maior para o menos. (Na internet você encontra vários)
Depois é só exibir os 6 maiores.

E

Legal…vou dar uma pesquisada e implementar…depois posto o resultado…

Criado 8 de janeiro de 2018
Ultima resposta 10 de jan. de 2018
Respostas 7
Participantes 3