Автор: Widowmaker1984

Вопрос 22 (массивы)

"Что такое массив?"

1. Массив — это конечная последовательность упорядоченных элементов одного типа, доступ к каждому из которых осуществляется по его индексу. В Java массив используется для хранения коллекции данных, но бывает полезно думать о массиве как о совокупности переменных одного типа.

скрытый текст1.1. Размер или длина массива — это общее количество элементов в массиве. Размер массива задаётся при создании массива и не может быть изменён в дальнейшем, т. е. нельзя убрать элементы из массива или добавить их туда, но можно присвоить существующим элементам новые значения. Индекс начального элемента — 0, следующего за ним — 1 и т. д. Индекс последнего элемента в массиве — на единицу меньше, чем размер массива. Данное решение было навязано математиками, которым было удобно начинать отсчёт массивов с нуля.

1.2. В Java массивы являются объектами. Это значит, что имя, которое даётся каждому массиву, лишь указывает на адрес какого-то фрагмента данных в памяти. Кроме адреса в этой переменной ничего не хранится. Индекс массива, фактически, указывает насколько надо отступить от начального элемента массива в памяти, чтоб добраться до нужного элемента.

1.2.1. Если программа выйдет за пределы индекса массива, она остановится с ошибкой времени исполнения ArrayOutOfBoundsException.

1.3. Если нужно изменять длину, то вместо стандартного массива следует использовать списочный массив ArrayList.

1.4. Разрешается массив с интерфейсным типом таким, как тип компонент . Элементы такого массива могут иметь значением пустую ссылку (null) или экземпляры любого классового типа, который реализует интерфейс. Разрешается массив с классовым типом abstract как тип компонент. Элементы такого массива могут иметь значением - пустую ссылку (null) или экземпляры любого подкласса класса abstract, который сам не abstract.

1.5. В Java (в отличие от Cи) массив типа char — не String, и ни строка. Объект String языка Java не меняется, то есть никогда не меняется его содержание, в то время как массив типа char имеет непостоянные элементы. Метод toCharArray в классе String, возвращает массив символов, содержащий ту же последовательность символов.

2. Возможны следующие варианты объявления массива:

тип[] имя;
тип имя[];

Где тип — это тип элементов массива, а имя — уникальный идентификатор. В разных языках программирования используются разные способы, и Java позволяет использовать более привычный вариант. Но большинство предпочитает первый вариант.

2.1. Примеры:

int[] a;
double[] ar1;
double ar2[];

3. При инициализации массива можно указать его размер, либо сразу перечислить через запятую все желаемые элементы в фигурных скобках. При этом размер будет вычислен автоматически на основе той последовательности элементов, которая будет указан. В данном случае после закрывающей фигурной скобки ставится точка с запятой, чего не бывает когда это скобка закрывает какой-то блок. Если массив был создан с помощью оператора new, то каждый его элемент получает значение по умолчанию.


3.1. Примеры:
a = new int[10]; // массив из 10 элементов типа int
int n = 5;
ar1 = new double[n]; // Массив из 5 элементов double
ar2 = {3.14, 2.71, 0, -2.5, 99.123}; // Массив из 6 элементов типа double

скрытый текст3.1.2. Можно смешать два способа. Например, если требуется задать явно значения только для некоторых элементов массива, а остальные должные иметь значения по умолчанию.

int[] ar1 = new int[6]; // массив из шести элементов с начальным значением 0 для каждого элемента
ar1[3] = 5; // четвертому элементу присвоено значение 5
ar1[5] = 7; // шестому элементу присвоено значение 7


3.2. Объявить имя для массива и создать сам массив можно на одной строке по следующей схеме:

тип[] имя = new тип[размер];
тип[] имя = {эл0, эл1, …, элN};

3.2.1. Примеры:

int[] mas1 = {10,20,30};
int[] mas2 = new int[3];

скрытый текст4. Чтобы обратиться к какому-то из элементов массива для того, чтобы прочитать или изменить его значение, нужно указать имя массива и за ним индекс элемента в квадратных скобках. Например, на первый элемент массива mas1 можно ссылаться как на mas1[0], на третий элемент как mas1[2]. Элемент массива с конкретным индексом ведёт себя также, как переменная.

4.1. В качестве индекса можно использовать числа или выражения, которые возвращают положительное значение типа int. Поэтому при вычислении выражения с типом long, следует преобразовать результат в int, иначе при компиляции возникнет ошибка. С типами short и byte проблем не будет, так как они полностью укладываются в диапазон int.

4.2. Длину любого созданного массива не обязательно запоминать, потому что имеется свойство, которое его хранит. Обратиться к этому свойству можно дописав .length к имени массива. Это свойство нельзя изменять (т. е. ему нельзя ничего присваивать), можно только читать. Используя это свойство можно писать программный код для обработки массива даже не зная его конкретного размера. Например, последний элемент массива mice всегда mice[mice.length - 1].

4.3. Нужно быть осторожным с копированием массивов. Массив — это не числа, а специальный объект, который по особому хранится в памяти. Скажем, в следующем случае:

int[] luckyNumbers = anyNumbers;

Массив остается прежним, и вторая переменная обращается к нему же, а не создаёт вторую копию.

4.3.1. Если же нужна именно копия массива, следует использовать метод Arrays.copyOf().

5. Методы для массива. Класс java.util.Arrays содержит различные статические методы для поиска, сортировки, сравнения и заполнения элементов массива. Методы перегружаются для всех примитивных типов.

- copyOf() − предназначен для копирования массива
- copyOfRange() − копирует часть массива
- toString() − позволяет получить все элементы в виде одной строки
- sort() — сортирует массив методом quick sort
- binarySearch() − ищет элемент методом бинарного поиска
- fill() − заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умолчанию для массива)
- equals() − проверяет на идентичность массивы
- deepEquals() − проверяет на идентичность массивы массивов
- asList() − возвращает массив как коллекцию

5.1. Класс Arrays содержит метод equals() для проверки на равенство целых массивов. Чтобы два массива считались равными, они должны содержать одинаковое количество элементов, и каждый элемент должен быть эквивалентен соответствующему элементу другого массива.

5.2. Сортировка (упорядочение по значениям) массива a производится методами Arrays.sort(a) и Arrays.sort(a, index1, index2). Первый метод упорядочивает в порядке возрастания весь массив, второй — часть элементов (от индекса index1 до индекса index2). Имеются и более сложные методы сортировки.

5.2. Метод Arrays.copyOf(оригинальный_массив, новая_длина) — возвращает массив-копию новой длины. Если новая длина меньше оригинальной, то массив усекается до этой длины, а если больше, дополняется нулями.

5.3. Если использовать вызов метода toString() непосредственно у массива, получится что-то не читаемое. Метод Arrays.toString(массив) возвращает строковое представление массива со строковым представлением элементов, заключенных в квадратные скобки. Метод deepToString() удобен для вывода многомерных массивов. Этот метод мы также уже использовали выше.

5.4. Метод Arrays.fill() позволяет быстро заполнить массив одинаковыми значениями. У метода есть восемнадцать перегруженных версий для разных типов и объектов. Метод fill() просто дублирует одно заданное значение в каждом элементе массива (в случае объектов копирует одну ссылку в каждый элемент).

Комментарии


Лучшее   Правила сайта   Вход   Регистрация   Восстановление пароля

Материалы сайта предназначены для лиц старше 16 лет (16+)