Ниже приведена подробная седьмая глава, ориентированная на новичков без опыта в программировании. В предыдущих главах мы разобрались с основами синтаксиса Java, научились писать методы, работать со строками. Теперь пришло время научиться обрабатывать сразу много элементов, а не только один. Для этого нам нужны массивы и коллекции.
Представьте, что вам надо хранить не одно число, а список из 10 чисел. Вы могли бы создать 10 переменных: int num1, num2, num3, ... num10;
Но это неудобно — громоздко и тяжело менять размер списка.
Чтобы упростить жизнь, в Java есть структуры данных для хранения наборов элементов:
ArrayList
): могут динамически изменять размер и предлагают удобные методы для работы с данными.Массив — это контейнер, который может хранить сразу несколько значений одного типа. Элементы массива нумеруются с 0.
Пример массива целых чисел (int):
int[] numbers = new int[5];
Эта строка создала массив numbers
из 5 элементов, каждый элемент — целое число (int
). Пока мы не присвоили им значения, элементы массива по умолчанию равны 0.
Существует несколько способов задать значения массива:
Присвоение значений по индексам:
int[] numbers = new int[5];
numbers[0] = 10; // первый элемент
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50; // пятый элемент
Сразу при объявлении:
int[] numbers = {10, 20, 30, 40, 50};
Здесь массив сразу инициализирован значениями 10, 20, 30, 40, 50.
Чтобы получить или изменить элемент массива, укажите его индекс в квадратных скобках:
int[] numbers = {10, 20, 30, 40, 50};
System.out.println(numbers[0]); // выведет 10
numbers[2] = 99; // теперь третий элемент массива — 99, массив: [10, 20, 99, 40, 50]
Помните, что индексы в Java начинаются с 0. Для массива из 5 элементов индексы будут 0,1,2,3,4. Если вы попытаетесь обратиться к несуществующему индексу (например numbers[5]
), будет ошибка ArrayIndexOutOfBoundsException
.
Число элементов массива хранится в его поле length
:
int[] numbers = {10, 20, 30, 40, 50};
int length = numbers.length; // length = 5
Полезно использовать length
для прохода по всем элементам массива в цикле:
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
Этот цикл выведет все элементы массива.
Есть удобный цикл, чтобы пройтись по всем элементам массива, не заботясь об индексах:
int[] numbers = {10, 20, 30, 40, 50};
for (int num : numbers) {
System.out.println(num);
}
Здесь num
последовательно принимает значение каждого элемента массива.
Массивы могут быть многомерными. Например, двумерный массив — это массив массивов, напоминает таблицу.
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Доступ к элементам:
System.out.println(matrix[1][2]); // второй ряд, третий столбец, выведет 6
Можно использовать вложенные циклы для прохода по всем элементам:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
Массивы — хорошая штука, но их размер фиксирован. Если вы создали массив из 5 элементов, вы не можете динамически добавить шестой элемент без создания нового массива.
Для более гибкого управления наборами данных существуют коллекции. Одна из самых простых и популярных коллекций — ArrayList
.
ArrayList
позволяет:
Чтобы использовать ArrayList
, нужно импортировать:
import java.util.ArrayList;
Пример создания ArrayList
для хранения строк:
ArrayList<String> names = new ArrayList<>();
names.add("Аня");
names.add("Борис");
names.add("Вика");
System.out.println("Размер списка: " + names.size()); // размер: 3
Здесь String
в угловых скобках означает, что это список строк. Вы можете использовать любой ссылочный тип данных, в том числе классы-обёртки для примитивов (например, Integer
для int
).
ArrayList<String> names = new ArrayList<>();
names.add("Аня");
names.add("Борис");
// Получить элемент по индексу
String firstName = names.get(0); // "Аня"
System.out.println(firstName);
// Изменить элемент
names.set(1, "Влад"); // теперь список: ["Аня", "Влад"]
Размер списка (количество элементов) можно узнать через names.size()
.
Можно использовать обычный цикл for
с индексом:
for (int i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
Или цикл for-each
:
for (String name : names) {
System.out.println(name);
}
Вы можете удалить элемент по индексу или по значению:
names.remove(0); // удалит элемент с индексом 0 ("Аня"), теперь список: ["Влад"]
names.add("Галя");
names.remove("Влад"); // удалит "Влад" по значению, теперь ["Галя"]
ArrayList
удобен, когда вам не известен точный размер набора данных заранее, или когда нужно часто добавлять/удалять элементы. Например, если вы пишете программу для хранения списка покупок, пользователю проще добавлять элементы в ArrayList, чем заботиться о размерах массивов.
Массивы:
ArrayList:
Integer
, Double
и т.д., а не int
или double
).Для начала чаще будут пригодны массивы, когда вы знаете размер данных заранее, и ArrayList — когда нужно гибкое изменение набора элементов.
Пример использования массива: у нас есть 5 оценок студентов, и мы хотим вычислить среднее:
int[] grades = {5, 4, 5, 3, 4};
int sum = 0;
for (int grade : grades) {
sum += grade;
}
double avg = (double) sum / grades.length;
System.out.println("Средняя оценка: " + avg);
Пример с ArrayList: создадим список покупок и выведем его:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<String> shoppingList = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("Введите товары (пустая строка для выхода):");
while (true) {
String item = scanner.nextLine();
if (item.isEmpty()) {
break; // остановка, если строка пустая
}
shoppingList.add(item);
}
System.out.println("Ваш список покупок:");
for (String product : shoppingList) {
System.out.println("- " + product);
}
}
}
Здесь пользователь может вводить сколько угодно товаров, список будет расширяться по необходимости.
В этой главе мы:
ArrayList
, который позволяет динамически изменять размер списка.В следующих главах мы продолжим знакомство с более сложными структурами данных и перейдём к объектно-ориентированному программированию, чтобы ещё лучше структурировать ваш код.
На этом мы завершаем седьмую главу. В следующей главе мы поговорим о принципах объектно-ориентированного программирования (ООП), которые являются фундаментом современных приложений на Java и помогут вам создавать более масштабируемые и понятные программы.
Просмотров: 65