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

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

Открыта

На этом уровне вы продолжили знакомство с коллекциями: разобрались, что такое 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. Точнее, меньше слов — больше кода и практики, ведь от этой темы у многих (и часто) остаются не знания, а каша в голове. Если хочется прощупать тему получше, не надо стесняться: смело читайте и разбирайтесь по ходу дела.


Комментарии (147)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grigoryvvv
Уровень 28
Expert
2 марта, 19:51
02.03.2026 / 14 уровень
Yarchy08
Уровень 16
24 декабря 2025, 16:22
Задача на закрепление: Анализ слов в предложениях Условие: Дан список предложений. Нужно создать статистику: сколько раз каждое слово встречается в каждом предложении.
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
Уровень 0
4 октября 2025, 12:22
8/12, вопросы по HashMap/HashSet - мимо…
GeorgyIngineer в void
31 июля 2025, 11:53
уровень целиком полная шляпа + халтура
GeorgyIngineer в void
31 июля 2025, 11:54
к тому же устаревшая недосказанная инфа про switch expr который уместно было бы к ветвлениям переместить отсюда
Andrew Voronov
Уровень 23
29 июля 2025, 17:19
Не пойму, какое значение имеют эти тесты?
Sergey T
Уровень 12
30 июня 2025, 09:05
Решил проверить как можно не сдать тест. Не удалось.
4el0vek3
Уровень 40
15 июля 2025, 14:36
Неплох
Aura
Уровень 23
24 мая 2025, 14:14
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, 14:20
Позже я обнаружил в одном собеседований на позицию Junior похожую задачу, где через мапу надо было фильтровать носки разного цвета и указать, у носков какого цвета нет пары. Так что даже улыбнуло, что мы, ребята, на шаг ближе к тому, чтобы стать Junior
zabungalilovo
Уровень 18
28 мая 2025, 15:46
Вот так заколхозил, но чатгпт сказал, что можно и проще, хотя и так сойдет)
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, 02:21
Какого же будет твое удивление, когда ты узнаешь, что эта задача решается в 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, 02:22
Но я нейронке сказал, что не хочу грузить голову и решать через getOrDefault, это уже продвинутое понимание Map, а оно приходится в квесте Java Collection, а не сейчас
Anonymous #3452270
Уровень 16
16 августа 2025, 20:36
уже много времени прошло, но я все равно хочу скинуть своё решение задачи
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, 02:47
Сойдет, братишка, все качественно, продолжай путь и ты сможешь решать такие задачи 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 января, 18:31
Так, ну мне тоже захотелось попробовать. Признаться, было нелегко. Темы дались тяжковато + после этого месячный перерыв, но шерстя предыдущие лекции 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, 22:17
за месяц прошел 14 уровней, не знаю на сколько это быстро, но я стараюсь как могу)
3 февраля 2025, 04:38
не надо думать о том, насколько это быстро, надо вот как раз думать о том, чтобы было понятно, а не быстро, поэтому не смотрим на скорость, смотрим на то как устроен Linked List
Tonny
Уровень 23
22 января 2025, 22:13
Linked list вообще не понял, надеюсь дальше по лучше пойму эту тему
VictorThe main expert in Automa в Строительная компани
28 января 2025, 12:51
Если сразу не понят - то уже никогда не поймёшь! Шутка.
Anton_Diachkov
Уровень 19
7 февраля 2025, 07:14
Зато быстро )
Di
Уровень 16
Expert
27 ноября 2024, 16:10
Я не знаю почему, но двигаюсь очень медленно, хотя каждый будний день я уделяю время на это и не чувствую сложностей. Помогите советом кто сможет)
Артём Сёмкин
Уровень 47
29 ноября 2024, 01:18
Друг, как говориться, дорогу осилит идущий) Главное не забрасывай и иди дальше. Ну... и иногда лучше 1 час каждый день, чем 7 часов в один.