ArrayList: a list that grows · ArrayList: список, который растет
A list that can grow
- An array has a fixed size. Once you make it, the length cannot change.
- An
ArrayListis a list that can grow and shrink while the program runs. - You must import it at the top of the file:
import java.util.ArrayList;.
Список, который может расти
- У массива фиксированный размер. Создав его, изменить длину нельзя.
ArrayList— это список, который может расти и уменьшаться во время выполнения программы.- Вы должны импортировать его в начале файла:
import java.util.ArrayList;.
Making an ArrayList
- Write the type of the items inside
<...>. This is the AP CSA way. ArrayList<String>holds text.ArrayList<Integer>holds whole numbers.- A new list starts empty, with size
0.
Создание ArrayList
- Укажите тип элементов внутри
<...>. Так делается в AP CSA. ArrayList<String>хранит текст.ArrayList<Integer>хранит целые числа.- Новый список начинается пустым, размером
0.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
System.out.println(names.size()); // 0
names.add("Ann");
names.add("Bo");
System.out.println(names.size()); // 2
System.out.println(names); // [Ann, Bo]
}
}
The five methods you need
list.size()— how many items are in the list.list.add(x)— putxat the end of the list.list.get(i)— the item at positioni(the first position is 0).list.set(i, x)— replace the item at positioniwithx.list.remove(i)— take out the item at positioni; later items shift left.
Пять необходимых методов
list.size()— сколько элементов в списке.list.add(x)— поместитьxв конец списка.list.get(i)— элемент на позицииi(первая позиция — это 0).list.set(i, x)— заменить элемент на позицииiзначениемx.list.remove(i)— удалить элемент на позицииi; последующие элементы сдвинутся влево.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruit = new ArrayList<String>();
fruit.add("apple");
fruit.add("pear");
fruit.add("plum");
System.out.println(fruit.get(0)); // apple
fruit.set(1, "grape"); // pear -> grape
fruit.remove(2); // take out "plum"
System.out.println(fruit); // [apple, grape]
}
}
Numbers need Integer
- An
ArrayListcan only hold objects, not the simple typeint. - So we write
ArrayList<Integer>.Integeris the object form ofint. - Java changes between
intandIntegerfor you. This is called autoboxing. - You can
add(7)anint, andget(0)gives back a value you can use asint.
Числам нужен Integer
ArrayListможет хранить только объекты, а не примитивный типint.- Поэтому мы пишем
ArrayList<Integer>.Integer— это объектная формаint. - Java автоматически преобразует между
intиInteger. Это называется автоматическим упаковыванием (autoboxing). - Вы можете
add(7)⟨int⟩, иget(0)возвращает значение, которое можно использовать какint.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(10); // int 10 is boxed into Integer
nums.add(20);
int first = nums.get(0); // unboxed back to int
System.out.println(first + nums.get(1)); // 30
}
}
Two ways to traverse
- An index for-loop uses positions
0tosize() - 1. Use it when you need the index. - An enhanced for-loop (
for (int x : list)) reads each item in turn. Use it when you only need the values. - Both visit every item once, in order.
Два способа обхода
- Индексный for-цикл использует позиции от
0доsize() - 1. Используйте его, когда нужен индекс. - Enhanced for-цикл (
for (int x : list)) читает каждый элемент по очереди. Используйте его, когда нужны только значения. - Оба варианта посещают каждый элемент ровно один раз, в порядке следования.
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(3);
nums.add(5);
nums.add(8);
// index for-loop
for (int i = 0; i < nums.size(); i++) {
System.out.println("at " + i + ": " + nums.get(i));
}
// enhanced for-loop
int total = 0;
for (int x : nums) {
total = total + x;
}
System.out.println("total " + total); // total 16
}
}
Common mistakes
ArrayListuses.add,.get(i),.size()— not[].- Store objects: use
ArrayList<Integer>, notArrayList<int>.
Распространенные ошибки
ArrayListиспользует.add,.get(i),.size()— не[].- Храните объекты: используйте
ArrayList<Integer>, а неArrayList<int>.
Now you try
- Each task pre-fills the class skeleton — write your code inside main, or complete the method shown.
- Press Run to compile and run, then Check answer.
- Your code compiles and runs on the server, so even the first run is fast.
Теперь попробуйте сами
- Каждая задача заранее заполняет каркас класса — напишите свой код внутри main или дополните показанный метод.
- Нажмите Run (Выполнить), чтобы скомпилировать и запустить, затем Check answer (Проверить ответ).
- Ваш код компилируется и выполняется на сервере, поэтому даже первый запуск происходит быстро.
An ArrayList grows · ArrayList увеличивается в размере
Unlike an array, an ArrayList changes size as you add/remove. · В отличие от массива, ArrayList меняет размер при добавлении или удалении элементов.
Complete sumList(ArrayList<Integer> a) so it returns the total of all numbers in the list. An empty list totals 0. Traverse with a loop. · Допишите sumList(ArrayList<Integer> a), чтобы он возвращал сумму всех чисел в списке. Сумма пустого списка равна 0. Обход выполняется с помощью цикла.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Complete countUp(int n) so it makes a new ArrayList<Integer>, adds the numbers 1, 2, ..., n in order, and returns it. If n is 0, return an empty list. · Допишите countUp(int n), чтобы он создавал новый ArrayList<Integer>, добавлял числа 1, 2, ..., n по порядку и возвращал его. Если n равен 0, верните пустой список.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Complete doubleAt(ArrayList<Integer> a, int i). Read the value at index i with get, then use set to store two times that value back at index i. Return nothing (void). · Допишите doubleAt(ArrayList<Integer> a, int i). Прочитайте значение по индексу i с помощью get, затем используйте set, чтобы сохранить удвоенное это значение обратно по индексу i. Ничего не возвращайте (void).
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.