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

  • 10
  • Недоступна
Ввести с консоли имя файла. Считать все байты из файла. Не учитывая повторений - отсортировать их по байт-коду в возрастающем порядке. Вывести на экран. Закрыть поток ввода-вывода. Пример байт входного файла: 44 83 44 Пример вывода: 44 83
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (90)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Сергей20 уровень, Днепр
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 Sedov28 уровень, Москва
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<>();
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 + " ");// добавляем пробел при выводе
        }
Андрей23 уровень, Москва
28 июня 2018, 16:24
Кто решал через любую коллекцию, укажите вашему коду на любой файл с фильмом, чтобы размер был >1 Gb и попробуйте дождитесь окончания программы :) А пока ждете прочтите статью: клац
Vitaly Khan35 уровень
14 июня 2018, 20:32
простенькая задачка) в пять строчек) хороший повод вспомнить TreeSet...
15 июня 2018, 15:37
ааа! Блин) Про TreeSet забыл, вот я ... Сделал с использованием stream().distinct().sorted()...
Артем28 уровень, Минск
14 мая 2018, 10:46
Забыл, что TreeSet режет повторные значения, поэтому сначала все вложил в HashSet, а потом создал TreeSet, которому в конструктор передал уже готовый сет только с уникальными значениями...