Tak przy okazji tu masz przykład jak można to zrobić na strumieniu
int data[] = { 1, 5, 7, 4, 6, 2, 0, 1, 3, 2, 2 };
Map<Integer, Long> count = Arrays.stream(data)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), counting()));
int max = count.entrySet().stream()
.max((first, second) -> {
return (int) (first.getValue() - second.getValue());
})
.get().getKey();
System.out.println(max);
Analizując twój przykład strasznie przekombinowałeś generalnie nie wiem po co niektóre operacje jak licznik, skoro zliczasz elementy po sobie iterując a nie te co się powtarzając
Zmienna element nie ma sensu, ustawiania jej na tab[0]...
dalej idąc rezultat i tak bedzie tablica bo przepinasz referencje.
Generalnie jeśli jednak chcesz zachować swoje rozwiązanie, jednak na końcu to twoja praca jesteś autorem to wypisując możesz zastosować distinct na tablicy wynikowej i otrzymać to co chcesz
System.out.println(Arrays.toString(Arrays.stream(tab).distinct().toArray()));
tworzysz w strumieniu, wybierasz tylko pojedyncze elementy i rezultat jest [5,7] bez powtórzeń
Generalnie rozumiem twoje założenie, ale to jest troszeczke za duzo operacji najpierw zliczasz maksymalne wystapienia a potem powtarzasz te operacje dla tej wartosci i dodajesz ja do tablicy... bez sensu, pomysl o SORTOWANIU :) i potem myknij to porównaniem po kolei zliczając