Первый вариант просчитывает файл ~1.8 млн байт за 2.4 сек Второй вариант я не смог дождаться пока он просчитает все байты. НО! Второй вариант валидатор принял. А первый не принимает. Говорит время выполнения слишком большое. Может мне кто нибудь подскажет что я делаю не так?
package com.javarush.task.task18.task1803;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;

/*
Самые частые байты

Ввести с консоли имя файла.
Найти байт или байты с максимальным количеством повторов.
Вывести их на экран через пробел.
Закрыть поток ввода-вывода.


Требования:
1. Программа должна считывать имя файла с консоли.
2. Для чтения из файла используй поток FileInputStream.
3. В консоль через пробел должны выводиться все байты из файла с максимальным количеством повторов.
4. должны выводится в одну строку.
5. Поток чтения из файла должен быть закрыт.
*/

public class Solution {
    public static void main(String[] args) throws Exception {
        //Получим имя файла
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream fileInputStream = new FileInputStream(reader.readLine());
        reader.close();

        HashMap<Integer, Integer> iIHashMap = new HashMap<Integer, Integer>();
        //Всё считали открыли поток засекаем время непосредственного нахождения часто встречающихся байтов
        Date date = new Date();
//        //**************************************************Первый вариант
//        //Первый вариант просто в одном цикле сразу рассчитывает максималку и хранит в HashMap
//        //Файл 1,8Мб(*.png ~1.8 млн байт) выполняется 2,4 сек
//        //Но данный вариант не принимается валидатором.
//        HashMap<Integer, Integer> iIHashMapMax = new HashMap<Integer, Integer>();
//
//        int i;
//        int max = Integer.MIN_VALUE;
//
//        while ((i = fileInputStream.read()) != -1){
//            int thereIsMap;
//
//            try {
//                thereIsMap = iIHashMap.get(i);
//            } catch (Exception e) {
//                thereIsMap = 0;
//            }
//
//            if (thereIsMap != 0)
//                iIHashMap.remove(i);
//
//            iIHashMap.put(i, ++thereIsMap);
//
//            if (max == thereIsMap) iIHashMapMax.put(i, max);
//            else if (max < thereIsMap){
//                max = thereIsMap;
//                iIHashMapMax.clear();
//                iIHashMapMax.put(i, max);
//            }
//        }
//
//        fileInputStream.close();
//
//        for (Map.Entry<Integer, Integer> pear: iIHashMapMax.entrySet()) {
//            System.out.print(pear.getKey() + " ");
//        }

        //**************************************************Второй вариант
        //3 тупа цикла которые тратят на файл размером
        //Файл 1,8Мб(*.png ~ 1.8 млн байт) выполняется
        //Валидатор принимает этот вариант.... Что за?
        ArrayList<Integer> list = new ArrayList<>();
        while (fileInputStream.available() > 0) {
            list.add(fileInputStream.read());
        }
        fileInputStream.close();

        for (int i = 0;i <list.size(); i++) {
            //И вот тут "Collections.frequency" выполняется неимоверно долго но валидатор принимает. Что за?
            //Я так и не дождался пока он выполнит!
            iIHashMap.put(list.get(i), Collections.frequency(list,list.get(i)));
        }

        int max = Integer.MIN_VALUE;

        for (Map.Entry<Integer,Integer> maps:iIHashMap.entrySet()) {
            if (maps.getValue() > max)
                max = maps.getValue();
        }

        for (Map.Entry<Integer,Integer> maps:iIHashMap.entrySet()) {
            if (maps.getValue().equals(max))
                System.out.print(maps.getKey() + " ");
        }
        //**************************************************Второй вариант
        //Итоговое время!
        Date date2 = new Date();
        System.out.println();
        System.out.println("time " + (date2.getTime() - date.getTime()));
    }
    }