Добрый день! Как пытаюсь решить задачу: 1) Метод readAndGet -> читает байты из потока, преобразует в чары и засовывает в Arraylist, его же и возвращает. 2) Метод countAndSort -> сортирует ArrayList чаров с помощью стандартной Collection.sort, а потом через итерацию считает количетсво повторяемых символов и засовывает их в HashMap, при этом key - это символ char, value - количество повторов. Решение не элегантное, много ненужной перезаписи, но рабочее на первый взгляд. В чем проблема: Для теста использую не строку из массива параметров, а просто путь к текстовому файлу на компьютере(текст в файле: asfdsaasfjsoigdafajasfasdjlkajfd). Валидатор ругается на 3 пункт, что не отсортирован по ascii. Так и есть, но дело вот в чем. Если смотреть работу программы, то при добавление в HashMap, а на напомни что добавляется уже отсортированный массив чаров, то есть ключи добавляются друг за другом в правильном порядке. Но почему то буква s, добавляется в map после a, хотя должна быть самой последней. И вот тут я не понимаю, потому что я всегда считал, что метод put проверяет key, и если он есть перезаписывает ячейку, а если нету то добавляет новую в конец. Где я ошибся ?
public class Solution {
    public static void main(String[] args) throws IOException {
        String inputFileName = "C:\\Users\\shiro\\OneDrive\\Рабочий стол\\text1.txt";

        ArrayList<Character>allChars = readAndGet(inputFileName);
        countAndSort(allChars);
    }

     static ArrayList<Character> readAndGet(String name) throws IOException{

        FileInputStream inputStream = new FileInputStream(name);
        ArrayList<Character>inputChars = new ArrayList<>();

            while (inputStream.available() > 0) {
                byte b = (byte)inputStream.read();
                char ch = (char) b;
                inputChars.add(ch);
            }
        inputStream.close();

            return inputChars;
    }

    static void countAndSort(ArrayList<Character> characters) {
        List<Character>copyList = characters;

        Collections.sort(copyList);

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


        for (Character ch : copyList) {
            int count = 0;
            for (int i = 0; i < copyList.size(); i++) {
                if (ch.equals(copyList.get(i))) count++;
            }
            map.put(ch, count);
        }

        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }

}