• ,

Уровень 7: план уровня и доп. материалы

План уровня:
  • Массивы и списки: Array, ArrayList, знакоство с Generics
  • Массивы: создание, инициализация.
  • Работа с массивами, length.
  • Статическая и динамическая инициализация массива.
  • Список ArrayList, внутренняя реализация, отличие от массива.
  • Работа с ArrayList-ом. Методы add(value), add(index, value), remove(index), size()
  • Знакомство с Generics — использование
  • Сопоставление примитивных типов с их непримитивными аналогами-классами
  • Создание и использование параметризированных списков
  • Знакомство с Collections
  • Цикл for each

  • Курс Java

На этом уровне изучается обзор коллекций. Детальное углубленное изучение будет на 30+ уровнях.

Что еще можно посмотреть на досуге:
Удаление элементов из списка и ConcurrentModificationException
Примитивы и обертки
Немного о строках в Java
Основные методы для работы со String
Класс Collections

Почитать про массивы и списки



Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария.
Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения

Вернуться к обучению java онлайн на JavaRush

62 комментария

Timur
Думаю стоит изменить рисунок чтобы для новичков было более понятнее:
Arrays
exis19ce
полностью согласен! долго думал что я что-то не так знаю о массивах, а оказалось картинка не совсем корректная
tarrus
где лекции.
Sant9Iga
здесь описывается какие темы были рассмотрены в 7 уроке + дополнительные материалы.
IvanDurov
*знакоМство с Generics
Predict_it
Скучаю по котам в java при объяснениях =(
hijack
Давай тебя запихаем в коробку и будем по тебе изучать java?
Hopping
А как вы относитесь к театру Куклачева?
hijack
Это зависит напрямую от того, что у них за кулисами творится. А вы работаете в этом театре?
вы то я надеюсь способны выучить java без котов?
Hopping
iddqd
У вас какие-то проблемы с котиками? Весь javarush (как и другие варианты типа codecombat etc) построен в более-менее игровой манере. Так люди лучше запоминают. Вариант с котами тоже вполне неплох.
Multmaniac
Задача на ArrayList идет ДО темы сабжа. Может в этом есть какой-то скрытый смысл, но разве не лучше давать задачу после теоретического материала? И с поиском минимального из 5 чисел была такая же история… Создавать over9000 условий, чтобы через несколько тем понять, что задача решается в несколько строчек с помощью массива.
hubert
Именно для этого: чтобы понять, что решается проще.
Predict_it
Почуствовать это ужасное чувство и больше к нему не возвращаться. В sql тоже аутисты некоторые вручную вводят данные, хотя можна пользоваться от силы 10 операторами и быть счастливым.
Naissur
Базовые алгоритмы тоже изучают, хотя их уже давно можно вызывать одним оператором. Делается это для того, чтобы ты понимал принципы и учился самостоятельно думать.
Troy
вот что заставляет улыбнуться www.youtube.com/watch?v=ywWBy6J5gz8
bratva8889
Извините где найти лекции? У меня ничего не показывает.
Goodpupil
я потихоньку иду вперёд.
mTihiy
В лекции написано, что размер ArrayList увеличивается в 2 раза если нет места для добавления нового элемента. В обсуждении лекции 8 предлагаются ссылки на доп.материал, где указано, что размер увеличивается в 1,5 раза.
Для понимания принципа, думаю нет разницы. Но все же, какое из значений ближе к истине?
Попробовал разобраться в исходной документации, самому не удалось найти явного описания увеличения.
zibul444
(oldCapacity * 3) / 2 + 1 — на один элемент больше чем в 1.5 раза)) то есть присутствует доля правды и там и там)))
На работе это ни как не сказывается, т.к. size возвращает количество используемых элементов…
haromets
Может кто-нибудь объяснить, почему в примере «Удаление всех чисел больше 5» в операторе for убрали увеличение i внутри цикла, а увеличение всё равно идет когда число больше 5 ????! т.е. там стоит оператор if и если число больше 5 то идёт удаление числа и цикл должен остановиться, а увеличение i должно происходить только когда число меньше или равно 5. Но увеличение i происходит в обоих случаях!!! ??
dimaMJ
  • dimaMJ
  • +2
  • Комментарий отредактирован 2015-03-20 00:57:12 пользователем dimaMJ
вы не разобрались с коллекциями) смотрите для чего это сделано, у нас есть 5 элементов, которые мы добавили в список, мы должны удалить элементы значение которых больше 5.
i не увеличивается в обоих случаях это не так, его увеличение происходит только в блоке else. Когда найден элемент больше 5, происходит его удаление, вот смотрите
Индекс — Значение
0 — 3
1 — 7
2 — 2
3 — 4
4 — 3
5 — 1
//У нас есть один элемент (1) со значением 7, его нужно удалить и вот таким будет список после удаления 7
0 — 3
1 — 2
2 — 4
3 — 3
4 — 1
//То есть после удаления элемента, на его место становится элемент который находится выше, если таков есть.
И в этом случае если после удаления мы увеличим i, мы перепрыгнем элемент, для этого i не становится больше если элемент удален, потому что на его место становится другой, не забывайте когда вы удаляете элемент, на его место становится сосед у которого индекс больше, если допустим вам нужно найти элемент со значением 7 и если нашли утроить его, вам нужно понимать что после него добавится еще две 7 и i необходимо будет увеличить на 3 позиции вверх, чтобы не возникло бесконечного цикла.
haromets
Спасибо за ответ,
для этого i не становится больше если элемент удален, потому что на его место становится другой, не забывайте когда вы удаляете элемент, на его место становится сосед у которого индекс больше
это я знаю, просто не думал, что при этом цикл for срабатывает. или он не срабатывает? а просто в операторе if происходит две операции сразу: 1-ая удаление элемента, и сразу же на место этого элемента становится другой и он типа уже меньше 5 и идет else?
dimaMJ
Представьте список как множество вагонов которые должны быть всегда связаны между собой) Если нам нужно удалить второй вагон, мы отсоединяем его от первого и третьего и убираем, а так как вагоны должны быть всегда связаны, третий вагон мы соединяем с первым и он уже становится естественно не третьим, а вторым :)Так будет легче все понять
Denis444
Многовато лекций на английском… Я так понимаю английский и так, и так учить придется?
Dukuu_
ДА, английский (как минимум на уровне чтения тех.документации) — обязательно подтягивай. Пригодится при трудоустройстве и особенно в работе.
hubert
А ничего, что код пишется тоже на английском?
Учите 1С — пишите на православном.
Denis444
Я может конечно еще только до 11 уровня дошел, но читать код и уметь читать на английском(т.е. знать весь перевод на русский) по моему это разные вещи… Я как бы все равно собирался учить английский, просто размышлял с чего начать. С английского, а потом java или учить джаву, ту что есть на русском, а потом уже инглиш…
onkf
Английский не надо учить. Просто читайтечитайтечитайтечитайте техническую литературу на English, потихоньку кидайте в словарь незнакомые слова. Само запомнится. Смотрите English фильмы с титрами (сначала русскими, потом аглицкими). 1-2 года и читать и слухать вы будете великолепно (разговорный это все же другое). Язык — это не цель, язык — это средство. Используйте его, пусть ни хрена не получается, продолжайте, навык постепенно будет улучшаться.
onkf
Вы что-то знаете о языке платформы 1С: Предприятие? И при чем тут «пишите на православном»?
FixerFixer
-Я хочу стать программистом, с какого языка мне начать?
-С английского.
bezobid
у меня одного в этой статье вместо примеров кода такая ерунда? Тоже код конечно, но не тот…

blizzard
нет, у меня тоже. Че-то там с версткой.
snuk
Это не верстка. Это плагин highlighter. У меня он тоже не работает, точнее выдает такой же html код верстки. Не знаю как поправить, чтобы отображалось верно, но чтобы прочитать что там «зашифровано/закодировано», берется этот код, заталкивается в txt файл, сохраняется в расширении .html и открывается браузером. Результатом будет подсвеченный синтаксис java кода.
snuk
  • snuk
  • 0
Массивы: создание, инициализация(из лекции)
В линке в статье ошибка. А именно:
for (int i = 0; i < a. length; i++ System.out.println (a[i]);
Неверно. В условие цикла компилятор не принимает подобного, но можно сделать так:
for (int i = 0; i < result.size(); i++) System.out.println(result.get(i));
Но это может привести к ухудшению читабельности.
Pegas
В чем отличие
{
String d = list.get(i);
list.add(i,d);
}

от
{list.add(i,list.get(i));}

Дело в том, что при первом варианте кода программа работала правильно, а при втором варианте — нет. Вопрос: почему list.get(i) нельзя сразу вставить в функцию list.add?
mrserfr
  • mrserfr
  • +1
  • Комментарий отредактирован 2016-01-07 14:40:45 пользователем mrserfr
Отличий нет, должно быть все одинаково. Полный код выложи, может с ним связано, что корректно у тебя не отрабатывало
icewj
habrahabr.ru/post/128269/

Полезная статья про списки.
JohnnyMad
Вот тут есть маленькая ошибка, надо бы исправить чтобы не путать новичков. Спасибо

level07.lesson05. Последний код
Krok
  • Krok
  • 0
  • Комментарий отредактирован 2016-02-19 22:54:09 пользователем Krok
Доброго времени суток! На 7-м уровне, в плане лекции, анонсирован цикл for each, дошел до lesson 12 (задачи от капитана Боброва), но упоминания цикла for each не увидел…
Комментарий в 5-м примере lesson 8: "//быстрый for по всем элементам, только для коллекций" — это оно?

for (Integer x: result) //быстрый for по всем элементам, только для коллекций
{
System.out.println(x);
}
vlad55
Сортировка массива.очень полезная ссылка
study-java.ru/uroki-java/urok-11-sortirovka-massiva/
sunchoss
а где сама лекция? вижу только содержание
curlymike
Я тоже.
KirillLB
  • KirillLB
  • 0
  • Комментарий отредактирован 2016-05-20 12:18:24 пользователем KirillLB
Не до конца понял решение (по комментариям) проблемы описанной здесь stackoverflow.com/questions/223918/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-re

Может кто-то пояснить?
teacher5555
  • teacher5555
  • 0
  • Комментарий отредактирован 2016-06-21 21:39:39 пользователем teacher5555
Судя по всему проблема в том, что тот способ удаления элемента из коллекции, указанный автором, является некорректным. Чуть ниже товарищи предложили решение

for (Iteratoriterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
// Remove the current element from the iterator and the list.
iterator.remove();
}
}

как я понял использующее интерфейс Iterator. В итоге я код переписал так:

for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (Iteratoriterator = l.iterator(); iterator.hasNext();) {
Integer num = iterator.next();
if (num == 5) {
// Remove the current element from the iterator and the list.
iterator.remove();
}
}

System.out.println(l);
}

После чего компилятор удалил все «5» из коллекции и вывел на экран, что осталось, что и требовалось.

В итоге, что хотели от нас парни из JavaRush:
1) Обратить внимание, что есть крутой сайт stackoverflow.com/
2) Учить английский ))
3) Запустить код автора вопроса и посмотреть что будет
4) Немного покурить тему интерфейсов, коллекций (мы это ещё будем проходить) и попробовать исправить код автора. Пока до деталей не понятно, но идея ясна.
AleksKosmonavt
прикольнгое видео по сортировке массивов:
study-java.ru/uroki-java/urok-11-sortirovka-massiva/
youtu.be/lyZQPjUT5B4
youtu.be/Ns4TPTC8whw
kterrita
public class MainClass
{
    public static void main(String[] args) 
    {
        int[] numbers = new int[10];

        for (int i = 0; i < numbers.length; i++)
        {
           numbers[i] = 9 - i;
        }
    }
}


По-моему тут баг, пробовал и копипастом и вручную.
cold-f
https://youtu.be/87pm79sPSvc — видео, которое мне наглядно объяснило, что такое дженерики, и какие там есть подводные камни.
firstprime
Cпс. Видео зашло норм). Из урока на сайте сложилось впечатление, что дженерики это какая-то редко используемая фигня. Видео исправляет это заблуждение. Бонусом введение в коллекции. В общем рекомендую к просмотру.
Skiff
На текущий момент в Java Syntax 7 уровень, 5 лекция. Везде по ходу текста ошибка при объявлении списка.
ArrayList list = new ArrayList();
то есть без указания типа. Должно же быть
ArrayList<String> list = new ArrayList<String>();


Будучи новичком попался на этом измучив вдоль и поперек следующие две задачи, пока не подсказали.
snuk
  • snuk
  • 0
Товарищи, не верьте интуиту, они мелкие и гнусные врунишки, вводящие неокрепшие умы в заблуждение =) Они утверждают «Если бы индекс превысил максимально возможное для такого массива значение, то появилась бы ошибка времени исполнения» но тут будет ArrayIndexOutOfBoundsException! А это разные вещи. Всегда проверяйте полученную информацию, сперва в своей ИСР, если там не компилится — используйте загуглю =)
lichMax
это ошибка времени исполнения. RuntimeException. Что Вам непонятно?
snuk
При обращении к несуществующему индексу ошибка времени исполнения?
lichMax
  • lichMax
  • 0
  • Комментарий отредактирован 2017-10-29 13:41:56 пользователем lichMax
учите иерархию экспешенов в джаве

ЗЫ Хотя… что по вашему означает «времени исполнения»? Они все возникают во время исполнения программы.
snuk
По иерархии да. Но это конкретная ошибка конкретного действия. С таким же успехом, можно было глядя на иерархию, заявить что это unchecked Exception. ArrayIndexOutOfBoundsException иерархическую принадлежность ко времени исполнения имеет, но это слишком общее.
что по вашему означает «времени исполнения»? Они все возникают во время исполнения программы.
вот потому и надо понимать, это это ошибка выхода за границы массива, а не времени исполнения, что может являться чем угодно, опускаясь по иерархии.
lichMax
Но вместе с тем она является ошибкой времени исполнения

ЗЫ какую-то странную демагогию развели на пустом месте
snuk
  • snuk
  • 0
  • Комментарий отредактирован 2017-10-30 20:28:54 пользователем snuk
В общем-то да =) Предлагаю на этом ее и закончить, думаю что выводы, все кому надо, сами смогут сделать =) Я по крайней мере еще раз освежил в памяти иерархию исключений…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.