Quantidade de vezes que o número se repete

O problema está na parte que comentei. Como posso alterar o código, para que funcione? Eu quero só os números que se repetem e a quantidade de vezes que se repete. Virei a noite tentando, mas não consegui =(

import java.util.Scanner;

public class TesteVetor {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int tam;
		
		System.out.println("Digite o tamanho do vetor");
		tam = s.nextInt();
		
		int vetValor[] = new int [tam];
		int valor;
		int vetRep[] = new int [tam];
		int vetCont[] = new int [tam];
		int cont =1;
		int contJ=1;
		int contVet =0;
		
		
		for(int i =0; i< vetValor.length;i++){
			System.out.println("Digite o valor");
			valor = s.nextInt();
			vetValor[i] = valor;
		}
		
		for(int i=0; i<vetValor.length;i++){
			
			for(int j=contJ; j<vetValor.length;j++){
				if((vetValor[i] == vetValor[j]) ){	//  1 , 1, 1, 2, 3
					//esta estourando, pois quando colocar o mesmo numero repetidamentes, o CONTVET++ acrescenta 1
					vetRep[contVet] = vetValor[i];
					
					contVet++;
					
					
				}	
				
			}
			
			contJ++;
		}
		
		contJ =1;
		contVet =0;
		for(int i=0; i<vetValor.length;i++){
			cont =1;
			for(int j=contJ; j<vetValor.length;j++){
				if((vetRep[i] == vetValor[j])){	//  1 , 1, 1, 2, 3
					cont++;
					vetCont[contVet] = cont;
					
					
				}				
			}
			contVet++;
			contJ++;
			
		}
		
		
		
	
	
		
	}

}

vamos la

tudo depende de que estruturas de dados vc pode usar ou que vc conhece.

isso é resolvido facilmente com um Map numero pra numero onde a chave é o numero a o valor é o numero ocorrencias.

outra forma é vc emular um Map se vc tiver numeros que variam pouco ( short positivo por exemplo ) é fazer um array com o maximo que cabe em um Short e usar o indice como numero, valor como numero de ocorrencias

ambas as formas vc faz um loop e ve se ja tem o numero guardado, nao tem? salva como 1. tem, pega o valor, incrementa e salva de novo.

tem outras formas? tem. basta ser criativo e vc informar as limitações.

Então, foi só uma questão que tinha na lista. Porem não consegui ainda resolver. Passei o dia tentando e nada.

for(int i=0; i<vetValor.length;i++){

		for(int j=contJ; j<vetValor.length;j++){
			if((vetValor[i] == vetValor[j]) ){	//  1 , 1, 1, 2, 3
				//esta estourando, pois quando colocar o mesmo numero repetidamentes, o CONTVET++ acrescenta 1
				vetRep[contVet] = vetValor[i];
				
				contVet++;
				
				
			}	
			
		}
		
		contJ++;
	}

Não consigo achar uma maneira de depois que ele varrer um número, não volte nele novamente. Ex: 1, 1, 1. Ele varre uma vez e o cont fica =3. Daí varre novamente e cont fica 2, porem como varreu o 1 já, não deveria varrer novamente. Porem não consegui achar uma solução.