public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fis = new FileInputStream(reader.readLine());

        ArrayList<Integer> list = new ArrayList<>();

            while (fis.available()>0){
                list.add(fis.read());
            }

        reader.close();
        fis.close();

        Map<Integer,Integer> map = new HashMap<>();

            for (Integer a:list) {
                map.put(a, map.getOrDefault(a, 0)+1);
            }

        int max = 0;
        for (int a:map.values()) {
            if(a>max){
                max = a;
            }
        }

        list.clear();

        for (Map.Entry<Integer,Integer> entry:map.entrySet()) {
            if(entry.getValue()==max)
                list.add(entry.getKey());
        }

        for (int a:list) {
            System.out.print(a + " ");
        }
    }
}
Как можно оптимизировать код, решая именно с помощью HashMap? Мой вариант кажется невероятно "топорным".