Die am häufigsten enthaltene Zahl eines Arrays liefern

Tibal

Mitglied
Hallo,

wie kann ich eine Methode umsetzen, in der ich die am häufigsten enthaltene Zahl liefere (bei gleicher Häufig keit die zuerst gefunden) ?

Ich dachte vielleicht an ein zweidimensionales Array, in der ersten Spalte wird der Wert gespeichert und in der zweiten Spalte die Häufigkeit. Anschließend wird dann die Zahl mit der größten Häufigkeit ausgegeben. Geht das so? Und brauche ich dann zwei for -Schleifen dafür?

Danke und Gruß
 
Geschachtelte Schleifen sind immer unperformant.

Verwenden könntest du folgende Methode:

Java:
	private static int getMode(int[] array){
		Map<Integer,Integer> map = new HashMap<Integer,Integer>();
		for(int current:array){
			Integer value = map.get(current);
			if(value == null){
				map.put(current, 1);
			} else {
				map.put(current, ++value);
			}
		}
		int mode = -1;
		int maxValue = -1;
		for(int current:map.keySet()){
			int value = map.get(current);
			if(value > maxValue){
				mode = current;
				maxValue = value; 
			}
		}
		return mode;
	}

Ich denke eine Erklärung sollte nicht nötig sein.
 
Ich habe mich mal etwas an Lambda Expressions rangemacht und folgendes führt auch zu dem selben Ergebnis (hab es getestet und es ist bei einer riesigen Zahlenmenge performanter als obiger Code; doch bei kleinen Zahlenmengen nicht):


Java:
private static int lambdaMode(List<Integer> list) {
	Map<Integer, Long> map = list.parallelStream().collect(Collectors.groupingByConcurrent(e -> e, Collectors.counting()));
        //parallelStream garantiert hier nicht das erste zu finden sondern irgendetwas
	return map.keySet().stream().max((x, x1)-> Long.compare(map.get(x), map.get(x1))).get();
}
 
Zuletzt bearbeitet:

Zurück
Oben