Примеры по ArrayList и Generics

Открыта
Примеры по ArrayList и Generics 1

— Давай-ка я начну с действительно полезных вещей. Сейчас ты увидишь несколько полезных примеров работы с ArrayList и Generics:

— Пример 1:

Ввод списка целых чисел с клавиатуры
public static void main(String[] args) throws IOException
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) );
    ArrayList<Integer> list = new ArrayList<Integer>() ;

    while (true)
    {
        String s = reader.readLine();
        if (s.isEmpty()) break;
        list.add(Integer.parseInt(s));
    }
}

— Пример 2:

То же, чётные числа добавляются в конец списка, нечётные — в начало.
public static void main(String[] args) throws IOException
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    ArrayList<Integer> list = new ArrayList<Integer>();

    while (true)
    {
        String s = reader.readLine();
        if (s.isEmpty()) break;

        int x = Integer.parseInt(s);
        if (x % 2 == 0)  //проверяем, что остаток от деления на два равен нулю
            list.add(x);          //добавление в конец
        else
            list.add(0, x);      //вставка в начало
    }
}

— Пример 3:

Удаление всех чисел больше 5:
public static void main(String[] args) throws IOException
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) );
    ArrayList<Integer> list = new ArrayList<Integer>();

    list.add(1);
    list.add(7);
    list.add(11);
    list.add(3);
    list.add(15);

    for (int i = 0; i < list.size(); ) //убрали увеличение i внутрь цикла
    {
        if (list.get(i) > 5)
            list.remove(i);  //не увеличиваем i, если удалили текущий  элемент
        else
            i++;
    }
}

— Пример 4:

Разделение массива на два — чётных и нечётных чисел
public static void main(String[] args) throws IOException
{
    //статическая инициализация массива
    int[] data = {1, 5, 6, 11, 3, 15, 7, 8};

    //создание списка, где все элементы должны быть типа Integer
    ArrayList<Integer> list = new ArrayList<Integer> ();

    //заполнение списка из массива
    for (int i = 0; i < data.length; i++) list.add(data[i]);

    ArrayList<Integer> even = new ArrayList<Integer>();  //чётные
    ArrayList<Integer> odd = new ArrayList<Integer>();    //нечётные

    for (int i = 0; i < list.size(); i++)
    {
        Integer x = list.get(i);
        if (x % 2 == 0)    //если x - чётное
            even.add(x);   // добавляем x в коллекцию четных чисел
        else
            odd.add(x);    // добавляем x в коллекцию нечетных чисел
    }
}
2
Задача
Java Syntax,  7 уровень,  8 лекция
Недоступна
Набираем код Ӏ Java Syntax: 7 уровень, 8 лекция
Java Syntax: 7 уровень, 8 лекция. Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— Пример 5:

Слияние списков.
public static void main(String[] args) throws IOException
{
    ArrayList<Integer> list1 = new ArrayList<Integer>();   //создание списка
    Collections.addAll(list1, 1, 5, 6, 11, 3, 15, 7, 8);   //заполнение списка

    ArrayList<Integer> list2 = new ArrayList<Integer>();
    Collections.addAll(list2, 1, 8, 6, 21, 53, 5, 67, 18);

    ArrayList<Integer> result = new ArrayList<Integer>();

    result.addAll(list1);   //добавление всех значений из одного списка в другой
    result.addAll(list2);

    for (Integer x : result)   //быстрый for по всем элементам, только для коллекций
    {
        System.out.println(x);
    }
}

— Круто. И что Диего даст мне сейчас кучу аналогичных задач, да?

— Ага!

Комментарии (420)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Дима
8 уровень, Комсомольск-на-Амуре
11 мая, 18:25
Почему в примере, где удаляем числа больше 5, i++ убрали из цикла? Нам ведь нужно перебрать весь список, как я понял, а мы в итоге удалили первое число попавшееся больше пяти и всё, i не идёт дальше
Дмитрий
8 уровень, Орёл
14 мая, 07:26
Потому что при удалении элемента, все следующие элементы сдвигаются в начало на одну ячейку (на ту, которую мы удалили). И если мы увеличим значение i, то перескочим через элемент.
Dmitry
12 уровень, Киев
16 марта, 20:32
понимаю что не по теме, но все же: встречаю выражение типа
for (Integer x : result)
что в нем происходит? как оно читается?
Евгений
8 уровень
20 марта, 06:30
прочитай это так: для каждого числового элемента Х из коллекции result. Т.е. цикл для каждого элемента итерируемого объекта.
Dmitry
12 уровень, Киев
20 марта, 10:14
если я правильно понял, то такое выражение работает только с массивами (или эрэй листами), и означает что "result" повторяется "Integer x" раз?! но как тогда понимать выражение
for (String text : result)
Burnoutman
8 уровень, Минск
21 марта, 21:02
for (Integer x : list1)
Это цикл foreach. Мы создаём переменную x и присваиваем ей значения из list1( можно из коллекций, массивов). Переменной x присвоятся все значения по порядку. Можно обойтись и без foreach:
ArrayList<Integer> list1 = new ArrayList<Integer>();
        list1.add(2); //добавляем значение
        for (int i = 0; i < list1.size(); i++) {
            System.out.println(list1.get(i));
        }
и тоже самое, но с foreach
for (Integer x : list1) {
            System.out.println(x);
        }
enot
18 уровень
16 февраля, 09:32
Чем Arrays отличается от Collections ? На практике?
Константин
27 уровень, Харьков
18 февраля, 22:27
Collections это супер класс для всех коллекций, а ArrayList - это один из его подклассов (кроме ArrayList (списков) есть еще много коллекций со своими особенностями: множества, очереди, карты...). Объекты Collections вы создавать не будете, на практике будете работать с его подклассами типа ArrayList. НО! Класс Collections имеет много полезных статических методов, один из которых нам продемонстрировали в примере: Collections.addAll
enot
18 уровень
19 февраля, 10:49
 Нет, вопрос по разнице между вот этими строками, например: Arrays.sort() Collections.sort()  Правильно ли я понимаю, что для массивов мы используем только Arrays, а для коллекций Collections ? Т.е. в каких случаях что нужно использовать?
Константин
27 уровень, Харьков
19 февраля, 18:30
Виноват, не правильно понял вопрос. Да, Arrays - для массивов, Collections - для коллекций
Igor
27 уровень, Минск
13 февраля, 18:21
Такое объявление дженерика было актуально до 7й версии джавы.
ArrayList<Integer> list = new ArrayList<Integer> ();
Начиная с 7-ой версии можно объявлять только слева.
ArrayList<Integer> list = new ArrayList<> ();
Nick
20 уровень
10 апреля, 16:30
Всё идет по кругу 😁 с вроде с 10й джавы 1й вариант становится тоже актуальным
var list = new ArrayList<Integer>();
Anonymous #2513968
16 уровень
5 февраля, 21:26
а зачем в Примере 3 BufferedReader??
Vladislav
9 уровень, Минск
1 марта, 08:31
Просто, чтоб было)
Карбофос Огарин
14 уровень, Санкт-Петербург
21 января, 19:38
Боюсь нажимать кнопку "Открыть следующую лекцию" Там задачи)
Валерий Пантелеев
12 уровень, Тюмень
19 января, 06:50
Пример вывода i++ за пределы условий цикла пришелся очень кстати, использовал в решении задачи про "Р" и "Л". (В Паскале такого не было! )))
Юрий Бойко
9 уровень
12 января, 09:29
Пример 4, строка 10 - это точно рабочий код?
Nimgvae
10 уровень, Брауншвейг
15 января, 14:18
Думаю да, есть вариант где можно цикл for без скобок использовать.
Виктория Владимирова
16 уровень, Москва
17 января, 20:03
рабочий. там 1 действие, поэтому можно. Если бы было 2, тогда нужны были б скобки { }.
UVM
8 уровень
10 декабря 2020, 13:19
В Java есть класс java.util.Collections, у которого очень много методов, полезных при работе с коллекциями -метод addAll(colls, e1, e2, e3, ..) Добавляет в коллекцию colls элементы e1, e2, e3,...
Shin
9 уровень, Омск
5 декабря 2020, 16:15
Обьясните пожалуйста на пальцах, как расшифровать этот момент в 5 примере: for (Integer x : result) { System.out.println(x); }
Regina Bulanova
19 уровень, Рязань
5 декабря 2020, 17:17
Это foreach. Он помогает пройтись по всем элементам(именно по элементам, не по индексам!). Прочитайте вот эту статью: Foreach Java, думаю, она многое прояснит. Но вернемся к примеру. Давайте разберем его на пальцах: for - это цикл for, с помощью него мы уже работали с ArrayList. Integer - тип итерационной переменной (то есть в листе, который мы перебираем, все элементы целочисленные) х - это имя переменной result - имя ArrayLista То есть мы просто проходимся по листу. Foreach нам позволяет сделать это без всяких счетчиков. Ниже прикрепляю два кода - один с foreach, другой - c for. Они эквивалентны.
for (type itVar : array)
{
    Блок операторов;
}
for (int i=0; i<array.length; i++)
{

    Блок операторов;
}
UVM
8 уровень
10 декабря 2020, 13:25
Форма расширенного цикла for: for (type variable : collection) { // некоторые операторы // ... } Что тут у нас есть: • type – тип внутренней переменной, имеющий имя variable; • variable – внутренняя переменная type-типа, видимая в границах блока фигурных скобок. Она итерационна и сохраняет элементы из набора данных collection; • collection – набор данных, перебираемых в цикле поочерёдно. И вот как раз в качестве набора таких данных может выступать и массив, и коллекция. Итак, в расширенном цикле for на Java осуществляется последовательный перебор всех элементов массива либо коллекции. При этом число итераций цикла равняется числу элементов в массиве. На каждой итерации значение какого-нибудь элемента массива попадает в итерационную переменную variable, которую вы можете обрабатывать либо использовать. А цикл гарантирует, что произойдёт перебор или прохождение по всему массиву, начиная с первого элемента, заканчивая последним.
UVM
8 уровень
10 декабря 2020, 13:53
Конструкция forEach https://javarush.ru/groups/posts/for-v-java
UVM
8 уровень
10 декабря 2020, 14:15
https://www.youtube.com/watch?v=PruJRzy1ch4&feature=emb_logo
Achyuta Gaura
8 уровень
15 марта, 07:24
если добавить break в foreach то выйдем из цикла)