JavaRush /Курсы /Java Syntax Pro Beta /Дополнительные лекции к уровню

Дополнительные лекции к уровню

Java Syntax Pro Beta
14 уровень , 8 лекция
Открыта

На этом уровне вы продолжили знакомство с коллекциями: разобрались, что такое HashMap и HashSet, а также узнали больше о методах вспомогательного класса Collections. В контексте HashSet надо было кстати рассказать о еще одном виде циклов — for-each, который поможет вывести список элементов HashSet на экран.

Ну и наконец, совершенно новая для вас тема — оператор множественного выбора switch.

В общем, предлагаем сделать вдох-выдох, и чтобы закрыть эти темы окончательно (на данный момент) — внимательно прочитать несколько дополнительных лекций. Будет нескучно!

Класс Collections

Есть такие задачи, для решения которых ArrayList подходит просто идеально. Авторы Java взяли и реализовали их в отдельном классе, чтобы вам и другим разработчикам не пришлось каждый раз реализовывать их самостоятельно. В этой статье вы узнаете о таких задачах и о классе Collections.

Цикл for-each

For-each, как вы уже знаете, — это разновидность цикла for, которая используется, когда нужно обработать все элементы массива или коллекции. В этой лекции вы найдете примеры использования этого цикла с массивом данных и коллекцией, а также посмотрите полезное видео о работе цикла. Ну а если этого будет мало, добро пожаловать в дополнительное чтение, где есть материалы наших студентов о For и For-Each Loop. А еще — подборка альтернативных методов работы с коллекциями в Java.

Оператор switch в Java

Представьте, что вы стоите на развилке, как богатырь с известной картины. Налево пойдёшь — коня потеряешь, направо пойдешь — знания обретёшь. Как запрограммировать такую ситуацию? Вы уже, скорее всего, знаете, что подобный выбор мы совершаем с помощью конструкций if-then и if-then-else. А что, если таких дорожек не две, а 10?

Есть дорожка «совсем направо», «чуть левее», «ещё чуть-чуть левее» и так далее, в количестве 10 штук? Представьте, как разрастётся ваш if-then-else код в таком варианте! Итак, у вас не одна развилка условий, а несколько, скажем, 10. Для таких ситуаций есть специальный оператор выбора — switch case java. О нем и поговорим еще разок.

LinkedList

Не только ArrayList'ом живёт Java-программист. Существует масса других полезных структур данных. Например, связный список, он же — LinkedList. Вы уже получили первые представления о нём, но пока не слишком-то разобрались, в чём особенности LinkedList? Читайте статью, и поймете гораздо больше о том, как устроена эта структура данных и какие выгоды от ее использования!

HashMap — что за карта такая?

Еще одну структуру данных из предыдущих лекций не оставим без внимания. Вы уже разобрались, что такое HashMap? Очень хорошо. Но если чувствуете себя неуверенно и думаете, что HashMap — не ваш конек, читайте статью и вникайте. В ней есть масса полезных примеров.

Как использовать класс Enum

Создавать классы вы уже умеете. А что делать, если нужно как-то ограничить в нем круг значений? До появления Java 1.5 разработчики самостоятельно придумывали «многоходовку» для решения этой задачи. А после для этих целей появился класс Enum: со всеми возможностями классов и с некоторыми особенностями. Из этой статьи вы узнаете, чем он отличается от других.

Enum. Практические примеры. Добавление конструкторов и методов

...И еще пара слов о Enum. Точнее, меньше слов — больше кода и практики, ведь от этой темы у многих (и часто) остаются не знания, а каша в голове. Если хочется прощупать тему получше, не надо стесняться: смело читайте и разбирайтесь по ходу дела.


14
Опрос
Коллекции, часть 2, 14 уровень, 8 лекция
Недоступен
Коллекции, часть 2
Коллекции, часть 2
Комментарии (146)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Yarchy08 Уровень 16
24 декабря 2025
Задача на закрепление: Анализ слов в предложениях Условие: Дан список предложений. Нужно создать статистику: сколько раз каждое слово встречается в каждом предложении.

List<String> sentences = List.of(
    "Java is great",
    "Python is popular",
    "Java is powerful and popular"
);
Результат: Map<String, Map<Integer, Integer>> Где: - Внешний ключ — слово (например, "Java") - Внутренний ключ — номер предложения (0, 1, 2) - Значение — количество вхождений слова в этом предложении Ожидаемый вывод:

{
  Java={0=1, 2=1},
  is={0=1, 1=1, 2=1},
  great={0=1},
  Python={1=1},
  popular={1=1, 2=1},
  powerful={2=1},
  and={2=1}
}
Bogdan Уровень 19
4 октября 2025
8/12, вопросы по HashMap/HashSet - мимо…
Georgy Dmitriev Уровень 19
31 июля 2025
уровень целиком полная шляпа + халтура
Georgy Dmitriev Уровень 19
31 июля 2025
к тому же устаревшая недосказанная инфа про switch expr который уместно было бы к ветвлениям переместить отсюда
Andrew Voronov Уровень 23
29 июля 2025
Не пойму, какое значение имеют эти тесты?
Sergey T Уровень 12
30 июня 2025
Решил проверить как можно не сдать тест. Не удалось.
4el0vek3 Уровень 36
15 июля 2025
Неплох
Aura Уровень 23
24 мая 2025
HashMap удивительно мало времени уделили, я когда задачи у нейронки попросил, чтобы закрепить тему, так я истерить начал от своей беспомощности и неспособности решить легкую, по мнению, нейронки задачу, кто хочет напрячь мозги, вот задачка, попытайтесь порешать на досуге =)

Есть список строк. Сгруппируй их по длине.

List<String> words = List.of("apple", "cat", "banana", "dog", "kiwi");

Результат:

3 → [cat, dog]
4 → [kiwi]
5 → [apple]
6 → [banana]

Тип карты:

Map<Integer, List<String>>
Aura Уровень 23
24 мая 2025
Позже я обнаружил в одном собеседований на позицию Junior похожую задачу, где через мапу надо было фильтровать носки разного цвета и указать, у носков какого цвета нет пары. Так что даже улыбнуло, что мы, ребята, на шаг ближе к тому, чтобы стать Junior
zabungalilovo Уровень 17
28 мая 2025
Вот так заколхозил, но чатгпт сказал, что можно и проще, хотя и так сойдет)

public class Task1 {

    public static void main(String[] args) {

        List<String> words = List.of("apple", "cat", "banana", "dog", "kiwi");
        Map<Integer, List<String>> result = groupByLength(words);

        for (Integer i : result.keySet()) {
            System.out.println(i + " -> " +result.get(i));
        }
    }

    public static Map<Integer, List<String>> groupByLength (List<String> words) {
        Map<Integer, List<String>> map = new HashMap<>();

        Set<Integer> lengths = new HashSet<>();
        for(String s : words) {
            lengths.add(s.length());
        }
        List<Integer>list = new ArrayList<>(lengths);
        Collections.sort(list);

        for (int x : list) {
            List<String> list2 = new ArrayList<>();
            for (String y : words) {
                if (y.length() == x) {
                    list2.add(y);
                }
            }
            map.put(x, list2);
        }
        return map;
    }
}
Aura Уровень 23
29 мая 2025
Какого же будет твое удивление, когда ты узнаешь, что эта задача решается в 3-6 строк с getOrDefault =) Но решение твое тоже хорошо, я решал ее через if(words.containsKey(key)) и если true то добавлял в список элемент, если нет, то для этого создавал новый список, вот еще раз решил -

public static void main(String[] args)  {
        List<String> words = List.of("apple", "cat", "banana", "dog", "kiwi");
        Map<Integer,List<String>> result = new HashMap<>();


        for (String str : words) {
            if(result.containsKey(str.length())) { //Если есть ключ ввиде длины строки, например apple - 5, то переходим в тело
                result.get(str.length()).add(str); //Берем уже существующий список и туда добавляем нашу строку
            } else { // если ключ 5 (apple) для нас новый, то делам тело else
                List<String> list = new ArrayList<>(List.of(str)); // создаем списпок
                result.put(str.length(),list); // Ну и ложим в мапу Integer ввиде длины строки и сам список
            }
        }
        for (var str : result.entrySet()) {
            System.out.println(str.getKey() + " -> " + str.getValue());
        }
    }
Aura Уровень 23
29 мая 2025
Но я нейронке сказал, что не хочу грузить голову и решать через getOrDefault, это уже продвинутое понимание Map, а оно приходится в квесте Java Collection, а не сейчас
Anonymous #3452270 Уровень 16
16 августа 2025
уже много времени прошло, но я все равно хочу скинуть своё решение задачи

public static void main(String[] args) {
        List<String> words = List.of("apple", "cat", "banana", "dog", "kiwi");
        Map<Integer, List<String>> sortedWords = sortWords(words);
        for (Integer key : sortedWords.keySet()){
            System.out.println(key+" -> "+sortedWords.get(key));
        }
    }
    public static Map<Integer,List<String>> sortWords(List<String> words){
        Map<Integer,List<String>> map = new HashMap<>();

        for(String word : words){
            if(!map.containsKey(word.length())){
                List<String> list = new ArrayList<>();
                list.add(word);
                map.put(word.length(),list);
            }
            else{
                List<String> list = map.get(word.length());
                list.add(word);
                map.put(word.length(),list);
            }
        }

        return map;
    }
Aura Уровень 23
17 августа 2025
Сойдет, братишка, все качественно, продолжай путь и ты сможешь решать такие задачи 3-4 строчками с помощью метода groupingBy, вот так будет выглядеть на нашем примере -

public static void main(String[] args) {
        List<String> words = List.of("apple", "cat", "banana", "dog", "kiwi");
        Map<Integer,List<String>> sortedWords = new HashMap<>(); //наша карта
        sortedWords = words.stream().collect(Collectors.groupingBy(String::length));//Я говорю, создай поток из того списка, далее сгруппируй мне, а как сгруппировать, а я говорю бери длину
        System.out.println(sortedWords); // ну и вывожу
    }
Tonny Уровень 23
22 января 2025
за месяц прошел 14 уровней, не знаю на сколько это быстро, но я стараюсь как могу)
Денис Кокшаров Уровень 1
3 февраля 2025
не надо думать о том, насколько это быстро, надо вот как раз думать о том, чтобы было понятно, а не быстро, поэтому не смотрим на скорость, смотрим на то как устроен Linked List
Tonny Уровень 23
22 января 2025
Linked list вообще не понял, надеюсь дальше по лучше пойму эту тему
Victor Уровень 3
28 января 2025
Если сразу не понят - то уже никогда не поймёшь! Шутка.
Anton_Diachkov Уровень 18
7 февраля 2025
Зато быстро )
Di Уровень 16 Expert
27 ноября 2024
Я не знаю почему, но двигаюсь очень медленно, хотя каждый будний день я уделяю время на это и не чувствую сложностей. Помогите советом кто сможет)
Артём Сёмкин Уровень 47
29 ноября 2024
Друг, как говориться, дорогу осилит идущий) Главное не забрасывай и иди дальше. Ну... и иногда лучше 1 час каждый день, чем 7 часов в один.
Жук (EdM) Уровень 33
26 октября 2024
Для этого уровня нужны свежие силы. Очень тяжко было после работы ковырять LinkedList. Чувствую, что не усвоил введение в коллекции, но надеюсь, что наверстаю все в будущем. 4/12((
Victor Уровень 3
28 января 2025
Если вернуться на предыдущую лекцию, а потом обратно - то тест можно пройти ещё раз, более внимательно.