Задачу решил, но код совсем не нравится, особенно два цикла в цикла, чувствую, что можно использовать только один (или вообще обойтись просто одним циклом без вложенного). Подскажите как это можно сделать? Есть ли какие-либо еще уже написанные методы в java?
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine());
        List<Integer> list = new ArrayList<>(100);
        List<Integer> list1 = new ArrayList<>(100);
        while (fileInputStream.available() > 0) {
            int p = fileInputStream.read();
            if (list.contains(p) && !list1.contains(p)) {
                list1.add(p);
            }
            list.add(p);
        }
        bufferedReader.close();
        fileInputStream.close();
        int n = 0;
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < list1.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                if (list1.get(i).equals(list.get(j))) {
                    n++;
                }
            }
            if (n > max) {
                max = n;
            }
            n = 0;
        }
        int k = 0;
        for (int i = 0; i < list1.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                if (list1.get(i).equals(list.get(j))) {
                    k++;
                }
            }
            if (k == max){
                System.out.print(list1.get(i) + " ");
            }
            k = 0;
        }
    }
}