- •§1. Лексика языка
- •§2. Типы данных
- •§3. Ссылочный тип
- •3.1. Понятие ссылочного типа данных
- •§4. Класс String
- •§6. Массивы
- •§7. Коллекции, списки, итераторы
- •Пробелы
- •Комментарии
- •Лексемы
- •§8. Поток управления
- •.1. Кодировка
- •Понятие ссылочного типа данных
- •3.2. Преобразование ссылочных типов (расширение и сужение)
- •§4. Класс String
- •§6. Массивы
- •8.1. Условные операторы
- •8.2. Неопределенные циклы
- •8.3. Определенные циклы
- •Многовариантное ветвление – оператор switch
- •Прерывание потока управления
- •Ветвления
§6. Массивы
В отличие от обычных переменных, которые хранят ровно одно значение, массивы (arrays) используются для хранения целого набора значений. Количество значений в массиве называется его длиной, сами значения – элементами массива. Элементы не имеют имен, доступ к ним осуществляется по номеру индекса. Если массив имеет длину n, отличную от нуля, то корректными значениями индекса являются числа от 0 до n-1. Все значения имеют одинаковый тип, и говорится, что массив основан на этом базовом типе. Массивы могут быть основаны как на примитивных типах, так и на ссылочных. Базовый тип может также быть массивом. Таким образом конструируется массив массивов, или многомерный массив.
При объявлении массива сначала указывается базовый тип, затем идет имя переменной, а пара квадратных скобок указывает, что используемый тип является именно массивом.
int a []; // массив a, который основывается на типе int int [] a; //данная запись также допустима |
Для многомерных массивов допускается смешанная запись:
int [] a []; // двумерный массив int b [][]; // двумерный массив Point p1[], p2[][]; //одно- и двумерный массив, основанные на типе Point |
Создание переменной типа массив еще не создает экземпляры этого массива. Такие переменные имеют объектный тип и хранят ссылки на объекты, однако изначально имеют значение null. Чтобы создать экземпляр массива, нужно воспользоваться ключевым словом new, после чего указывается тип массива и в квадратных скобках указывается длина массива. Чтобы подсчитать количество элементов в массиве, используется выражение типа: имя_массива.length.
Point [] p = new Point[10]; // объявление и создание массива int a[]; //объявление массива типа int a = new int[5]; //создание массива типа int длиной 5 элементов for (int i = 0; i < a.length; i++) { array [i] = i*i; } // заполнение массива |
В версиях Java, начиная с 5.0, был реализован новый цикл for each, позволяющий перебирать все элементы массива, не применяя счетчик. Новый вариант цикла for записывается следующим образом:
int a [] = new int [15]; // создали массив типа int for (int i=0; i < a.length; i++) a[i] = i*i; //заполнили массив данными for (int element : a){ System.out.println (element);} // вывод элементов массив на экран |
В Java получили широкое использование коллекции (Collections) – “умные” массивы с динамически изменяемой длиной, поддерживающие ряд важных дополнительных операций по сравнению с массивами. Базовым для иерархии коллекций является класс java.util.AbstractCollection. В общем случае класс коллекции не обязан быть потомком AbstractCollection – он может является любым классом, реализующим интерфейс Collection. Основные классы коллекций: Доступ к элементам коллекции в общем случае не может осуществляться по индексу, так как не все коллекции поддерживают индексацию элементов. Эту функцию осуществляют с помощью специального объекта – итератора (iterator). У каждой коллекции collection имеется свой итератор который умеет с ней работать, поэтому итератор вводят следующим образом:
Iterator iter = collection.iterator(); |
У итераторов имеются следующие три метода:
- boolean hasNext()- даёт информацию, имеется ли в коллекции следующий объект.
- Object next() – возвращает ссылку на следующий объект коллекции.
- void remove() – удаляет из коллекции текущий объект, то есть тот, ссылка на который была получена последним вызовом next().
Самыми распространёнными вариантами коллекций являются списки (Lists). Они во многом похожи на массивы, но отличаются от массивов тем, что в списках основными операциями являются добавление и удаление элементов. А не доступ к элементам по индексу, как в массивах.
В классе List имеются методы коллекции, а также ряд дополнительных методов:
