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
Комментарии (147)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grigoryvvv Уровень 26 Expert
2 марта 2026
02.03.2026 / 14 уровень
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 Уровень 1
31 июля 2025
уровень целиком полная шляпа + халтура
Georgy Уровень 1
31 июля 2025
к тому же устаревшая недосказанная инфа про switch expr который уместно было бы к ветвлениям переместить отсюда
Andrew Voronov Уровень 23
29 июля 2025
Не пойму, какое значение имеют эти тесты?
Sergey T Уровень 12
30 июня 2025
Решил проверить как можно не сдать тест. Не удалось.
4el0vek3 Уровень 40
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 Уровень 18
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); // ну и вывожу
    }
SUNSHINE Уровень 30
28 января 2026
Так, ну мне тоже захотелось попробовать. Признаться, было нелегко. Темы дались тяжковато + после этого месячный перерыв, но шерстя предыдущие лекции Java Rush и несколько тонких вопрос ГПТ - имеют такой результат. Хотел бы услышать от гуру замечания) Интересный факт, сначала задачу делал без упорядочивания(сорт не использовал), а результат всё-равно был отсортирован. Видимо мало входных значений и оно по кеш коду их упорядочило)



import java.util.*;


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

        ArrayList<Integer> sortedKeys = new ArrayList<>();
        
        for(String word: words) 
            if(!sortedKeys.contains(word.length()))
                sortedKeys.add(word.length());
        
        Collections.sort(sortedKeys);
        
        for(Integer key: sortedKeys)
            result.put(key, new ArrayList<String>());
        
        for(String word: words) 
            result.get(word.length()).add(word);
        
        for(Map.Entry entry: result.entrySet())
            System.out.println(entry.getKey() + "  -->  " + entry.getValue());
    }

}
Tonny Уровень 23
22 января 2025
за месяц прошел 14 уровней, не знаю на сколько это быстро, но я стараюсь как могу)
Денис Кокшаров Уровень 1
3 февраля 2025
не надо думать о том, насколько это быстро, надо вот как раз думать о том, чтобы было понятно, а не быстро, поэтому не смотрим на скорость, смотрим на то как устроен Linked List
Tonny Уровень 23
22 января 2025
Linked list вообще не понял, надеюсь дальше по лучше пойму эту тему
Victor Уровень 39
28 января 2025
Если сразу не понят - то уже никогда не поймёшь! Шутка.
Anton_Diachkov Уровень 18
7 февраля 2025
Зато быстро )
Di Уровень 16 Expert
27 ноября 2024
Я не знаю почему, но двигаюсь очень медленно, хотя каждый будний день я уделяю время на это и не чувствую сложностей. Помогите советом кто сможет)
Артём Сёмкин Уровень 47
29 ноября 2024
Друг, как говориться, дорогу осилит идущий) Главное не забрасывай и иди дальше. Ну... и иногда лучше 1 час каждый день, чем 7 часов в один.