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

  • 10
  • Недоступна
Ввести с консоли имя файла. Считать все байты из файла. Не учитывая повторений - отсортировать их по байт-коду в возрастающем порядке. Вывести на экран. Закрыть поток ввода-вывода. Пример байт входного файла: 44 83 44 Пример вывода: 44 83
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (94)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Alexey Tarakanov19 уровень, Москва
10 марта, 01:24
Мда, если идти по порядку, то после первых трех эта кажется уж очень простой) снес из прошлой половину, поставил treeset вместо hashmap и сразу на вывод...
Александр19 уровень, Казань
4 марта, 12:45
Скопировал код с предыдущей задачи - и поправил вывод. Решение через TreeSet поинтереснее будет...
map.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach((entry) -> {
  System.out.print(entry.getKey() + " ");
 });
Leo18 уровень, Москва
4 февраля, 13:57
ахахха, сначала заморочился сделал так чтобы программа считала количество повторений байтов и выводила по возрастанию повторений уникальных байтов. а оказывается всё гораздо проще))
Сергей31 уровень, Днепр
3 января, 21:59
Спасибо Philip j. все задачи решил по твоей рекомендации, только использовал не & 0b11111111, а +128 что то же самое.
Ильяс35 уровень, Москва
17 сентября 2018, 15:37
Когда-нибудь вы научитесь решать подобное экономя память. Ведь все листы ваши в догонку с set-ами/хешами жрут память. А тут максимум массива достаточно.
ramone19 уровень, Минск
14 ноября 2018, 17:51
Истину говорите, батенька )
Philip J.40 уровень, Днепр
8 августа 2018, 21:50
5 августа 2018, 17:00
В Java 8:
SortedSet<Integer> set = new TreeSet<>();
//...
//заполняем set байтами из файла
//...
set.stream().forEachOrdered(x -> System.out.print(x+ " "));
Gagarin28 уровень, Санкт-Петербург
31 июля 2018, 19:03
В последних 3-х задачах было очень полезно вспомнить и применить HashMap!
6 августа 2018, 12:23
А еще лучше TreeMap - сразу в отсортированном формате.
Philip J.40 уровень, Днепр
8 августа 2018, 21:50
А ещё лучше массив из 256 элементов. Индекс - это сам номер байта - а значение - это количество повторений. Сразу отсортировано и не будет считать сутки если запихнуть гиговый файл.
Alexander Sedov31 уровень, Москва
26 августа 2018, 07:25
ни разу не вспомнил про мэп )))
Beslan Bavizhev39 уровень
7 сентября 2018, 23:53
Вообще вам тут достаточен TreeSet.
Артур22 уровень, Санкт-Петербург
20 октября 2018, 22:00
Идея очень классная! В предыдущей задаче была ссылка на статью, где индекс - номер байта, значение - количество повторений. Идея бомба! Мир перевернулся :)
SpacePurr28 уровень, Казань
25 июля 2018, 19:25
По этой ссылке есть много вариантов решения основной проблемы данной задачи Как удалить повторяющиеся элементы из ArrayList? Особенно понравилась вот эта строчка
list = list.stream().distinct().collect(Collectors.toList());
которая удаляет повторяющиеся элементы из ArrayList. Учтите, чтобы это работало, инициализацию ArrayList нужно сделать с расширением типа
List<Byte> list = new ArrayList<>();
Petrusiova20 уровень
6 марта, 12:05
спасибо за ссылку!
Rihard198533 уровень
7 июля 2018, 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 + " ");// добавляем пробел при выводе
        }