Сортировка байт

  • 10
  • Недоступна
Ввести с консоли имя файла. Считать все байты из файла. Не учитывая повторений - отсортировать их по байт-коду в возрастающем порядке. Вывести на экран. Закрыть поток ввода-вывода. Пример байт входного файла: 44 83 44 Пример вывода: 44 83
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (86)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Ильяс28 уровень, Москва
17 сентября, 15:37
Когда-нибудь вы научитесь решать подобное экономя память. Ведь все листы ваши в догонку с set-ами/хешами жрут память. А тут максимум массива достаточно.
ramone18 уровень, Минск
14 ноября, 17:51
Истину говорите, батенька )
Philip J.40 уровень, Днепр
8 августа, 21:50
5 августа, 17:00
В Java 8:
SortedSet<Integer> set = new TreeSet<>();
//...
//заполняем set байтами из файла
//...
set.stream().forEachOrdered(x -> System.out.print(x+ " "));
Gagarin22 уровень, Санкт-Петербург
31 июля, 19:03
В последних 3-х задачах было очень полезно вспомнить и применить HashMap!
6 августа, 12:23
А еще лучше TreeMap - сразу в отсортированном формате.
Philip J.40 уровень, Днепр
8 августа, 21:50
А ещё лучше массив из 256 элементов. Индекс - это сам номер байта - а значение - это количество повторений. Сразу отсортировано и не будет считать сутки если запихнуть гиговый файл.
Alexander Sedov25 уровень, Москва
26 августа, 07:25
ни разу не вспомнил про мэп )))
Beslan Bavizhev39 уровень
7 сентября, 23:53
Вообще вам тут достаточен TreeSet.
Артур22 уровень, Санкт-Петербург
20 октября, 22:00
Идея очень классная! В предыдущей задаче была ссылка на статью, где индекс - номер байта, значение - количество повторений. Идея бомба! Мир перевернулся :)
SpacePurr27 уровень, Казань
25 июля, 19:25
По этой ссылке есть много вариантов решения основной проблемы данной задачи Как удалить повторяющиеся элементы из ArrayList? Особенно понравилась вот эта строчка
list = list.stream().distinct().collect(Collectors.toList());
которая удаляет повторяющиеся элементы из ArrayList. Учтите, чтобы это работало, инициализацию ArrayList нужно сделать с расширением типа
List<Byte> list = new ArrayList<>();
Rihard198533 уровень
7 июля, 19:30
Через ArrayList не получалось почему то((( Сделал через Treeset как все тут
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//
//Объект для считывания имени с консоли
        String name = "";// строка имени файла

        name = reader.readLine();// имя файла вводим в переменную

        FileInputStream inputStream = new FileInputStream(name);//поток для чтения файла

        TreeSet<Byte> treeSet = new TreeSet<>();///Коллекция для хранения уникальных данных

        while (inputStream.available() > 0) //пока есть еще непрочитанные байты//
        {//
           treeSet.add((byte)inputStream.read()); // прочитать очередной байт в трисет

        }//

        inputStream.close();//закрываем поток

        for (Byte b: treeSet){//в цикле выводим
            System.out.print(b + " ");// добавляем пробел при выводе
        }
Андрей23 уровень, Москва
28 июня, 16:24
Кто решал через любую коллекцию, укажите вашему коду на любой файл с фильмом, чтобы размер был >1 Gb и попробуйте дождитесь окончания программы :) А пока ждете прочтите статью: клац
Vitaly Khan23 уровень
14 июня, 20:32
простенькая задачка) в пять строчек) хороший повод вспомнить TreeSet...
15 июня, 15:37
ааа! Блин) Про TreeSet забыл, вот я ... Сделал с использованием stream().distinct().sorted()...
Артем28 уровень, Минск
14 мая, 10:46
Забыл, что TreeSet режет повторные значения, поэтому сначала все вложил в HashSet, а потом создал TreeSet, которому в конструктор передал уже готовый сет только с уникальными значениями...
Артур19 уровень
28 апреля, 23:11
И я не пойму все делают через TreeSet . разница то в чем . Главное правильно реализовать решение. Я от валидатора в шоке