Обход в Java
Создайте ArrayList<String> с именем tags, добавьте oak затем pine и обойдите список через for (String t : tags), печатая каждое слово. Скомпилируйте Lane.java и запустите java Lane. Экран должен показать две строки: oak, затем pine. Каждый проход цикла печатает одно значение. Обход каждого значения коллекции — то, чему учит эта страница.
Обойдите каждое значение один раз
На странице HashSet вы проверяли size и contains без цикла. На более ранней странице for-each в курсе вы обходили фиксированный массив. Эта страница обходит ArrayList тем же способом for-each, затем показывает индексный обход с get. Коллекция сначала растёт через add. Цикл идёт после сохранения значений.
Откройте Lane.java. Оставьте имя публичного класса Lane, чтобы оно совпадало с именем файла. Удалите оставшиеся демо HashSet, contains, Bin, Desk и map-put/get. Также удалите любой Scanner или nextLine. Программа не должна ждать ввода.
Ближе к верху, над public class Lane, напишите:
import java.util.ArrayList;
Внутри main создайте список и добавьте два слова:
ArrayList<String> tags = new ArrayList<String>();
tags.add("oak");
tags.add("pine");
Затем напишите заголовок и тело for-each:
for (String t : tags) { System.out.println(t); }
Двоеточие стоит между типом-и-именем элемента и коллекцией. Каждый проход ставит t на следующее слово. Не пишите счётчик в первой демо. Сохраните перед компиляцией.
import java.util.ArrayList;
public class Lane {
public static void main(String[] args) {
ArrayList<String> tags = new ArrayList<String>();
tags.add("oak");
tags.add("pine");
for (String t : tags) {
System.out.println(t);
}
}
}
Из папки, где лежит Lane.java, выполните javac Lane.java. Когда скобки, фигурные скобки, угловые скобки, двоеточия и точки с запятой совпадают, javac не пишет своей строки. Затем выполните java Lane — не java Lane.java и не java ArrayList. Уберите окончание .java из команды запуска.
Программа должна напечатать две строки и остановиться: oak, затем pine. Она не должна просить вас печатать. Если терминал ждёт ввод с клавиатуры, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте создание, две строки add и for-each.
Пройдите запуск один раз. Java начинается с Lane.main. Список хранит oak затем pine. Первый проход ставит t на oak и печатает oak. Второй ставит t на pine и печатает pine. Затем цикл заканчивается. Больше ничего не должно печататься. Если видите только 2, вы напечатали size() вместо обхода значений. Если видите одну строку [oak, pine], вы напечатали весь объект списка вместо каждого элемента — оставьте тело for-each как println(t). Если видите true или leaf, ещё работает демо Bin или Desk — перейдите к java Lane.
Если javac говорит, что не находит ArrayList, импорт отсутствует или стоит после строки класса. Перенесите import java.util.ArrayList; выше public class Lane. Если напишете for (String t : tags) без скобок и позже больше одной строки тела, на этой странице оставьте тело одним println внутри скобок, чтобы форма оставалась ясной. Написание имени коллекции после двоеточия должно совпадать со списком, который вы создали: tags, а не оставшееся slots со страницы for-each по массиву.
Индексный обход с get
Вторая демо обходит тот же список считанным for и get. Вы видите путь номера слота рядом с путём for-each.
import java.util.ArrayList;
public class Lane {
public static void main(String[] args) {
ArrayList<String> tags = new ArrayList<String>();
tags.add("oak");
tags.add("pine");
for (int i = 0; i < tags.size(); i++) {
System.out.println(tags.get(i));
}
}
}
Компилируйте и запускайте так же. Экран снова показывает oak, затем pine. Заголовок использует i с 0, пока i < tags.size(). Каждый вызов тела tags.get(i) читает один слот. Это привычка get со страницы list-methods внутри цикла. Предпочитайте файл for-each как первый учебный путь, когда номер индекса на экране не нужен. Оставьте индексный файл, чтобы доказать: оба обхода печатают те же две строки для этого списка. Если по ошибке начнёте i с 1, первым словом будет pine, а oak пропустится — держите i на 0 для полного обхода.
Не опирайтесь на порядок печати HashSet для экрана квиза этой страницы. Множества не обещают oak перед pine. Демо ArrayList сохраняют стабильный порядок для двух строк, которые вы ожидаете. Оставайтесь с ArrayList в учебных файлах, чтобы экран квиза оставался предсказуемым.
Один size — это не обход
Третий файл показывает оставшуюся привычку печатать только счётчик. На странице HashSet это было полезно, но это не iterating.
import java.util.ArrayList;
public class Lane {
public static void main(String[] args) {
ArrayList<String> tags = new ArrayList<String>();
tags.add("oak");
tags.add("pine");
System.out.println(tags.size());
}
}
Тот файл печатает 2 — одно число, не слова. Используйте его только как контраст. Сохранённые файлы урока обхода печатают каждое значение через for-each или индексный get. Не сдавайте файл только-size как путь квиза для экрана из двух строк.
Сравнение с for-each по массивам и проверками HashSet
Раньше for-each обходил слоты int[] или String[]. Здесь двоеточие всё ещё работает, но имя справа — ArrayList. На странице HashSet size и contains отвечали без печати каждого значения. Эта страница печатает каждое значение. Оставшееся демо contains из Bin — другой урок. Для этой страницы оставьте Lane с for-each, который печатает oak затем pine.
Когда рядом ещё лежат старые Bin.java, оставьте их или удалите только если они путают, какой класс вы запускаете. Выполните java Lane после компиляции файла обхода этого урока.
Что остаётся для wrappers
Эта страница обходит значения коллекции. Следующая страница покрывает типы-обёртки вроде Integer рядом с примитивным int, когда коллекциям нужны объекты. Оставайтесь здесь с for-each и индексным get на ArrayList. Не делайте демо wrapper обязательными на этой странице.
Перед wrappers
Вы можете импортировать java.util.ArrayList, добавить oak и pine и печатать каждое слово через for (String t : tags). Также можно обойти через for (int i = 0; i < tags.size(); i++) и tags.get(i). Скомпилируйте Lane.java и запустите java Lane. Экран показывает oak затем pine. Следующая страница — wrappers, где объектные типы стоят рядом с примитивами для хранения в коллекции.
Сохраните импорт. Сохраните два add перед циклом. Сохраните for-each как первый учебный обход. Эти привычки — контрольная точка перед движением дальше. Когда после for-each печатаются обе строки, обход сделал работу этого урока, и вы готовы к следующей теме.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху