How to get the length of 2d array in Java
The length of 2d array in Java is the number of rows present in it. We check for the number of rows because they are fixed. Columns may vary per row, hence we cannot rely on that. Thus to determine the length of the two-dimensional array we count the rows in it.
Two-dimensional array is a set of rows and columns. Each row may have the same or different numbers of columns in it.
Things will become clear if you understand the below diagram.
Program to Get Two Dimensional Array length in Java
Let’s have a look at the program now.
Output:
Explanation:
- As a first step, we declared a two-dimensional array.
- We used elements.length to find its size.
- Next, we used elements[0].length to find the number of columns per row.
- Array index always starts with 0 in Java.
Though finding the length is a trivial operation but it is a very useful one. From the output, you can figure out that the number of columns may differ per row.
I hope you understood the concept well. If you liked the article, please share it.
Массив
В любом языке программирования используются массивы, удобные для работы с большим количеством однотипных данных. Если вам нужно обработать сотни переменных, то вызывать каждую по отдельности становится муторным занятием. В таких случаях проще применить массив. Для наглядности представьте себе собранные в один ряд пустые коробки. В каждую коробочку можно положить что-то одного типа, например, котов. Теперь, даже не зная их по именам, вы можете выполнить команду Накормить кота из 3 коробки. Сравните с командой Накормить Рыжика. Чувствуете разницу? Вам не обязательно знать котов по именам, но вы всё равно сможете справиться с заданием. Завтра в этих коробках могут оказаться другие коты, но это не составит для вас проблемы, главное знать номер коробки, который называется индексом.
Еще раз повторим теорию. Массивом называется именованное множество переменных одного типа. Каждая переменная в данном массиве называется элементом массива. Чтобы сослаться на определённый элемент в массиве нужно знать имя массива в соединении с целым значением, называемым индексом. Индекс указывает на позицию конкретного элемента относительно начала массива. Обратите внимание, что первый элемент будет иметь индекс 0, второй имеет индекс 1, третий — индекс 2 и так далее. Данное решение было навязано математиками, которым было удобно начинать отсчёт массивов с нуля.
Объявление массива
Переменную массива можно объявить с помощью квадратных скобок:
Возможна и альтернативная запись:
Здесь квадратные скобки появляются после имени переменной. В разных языках программирования используются разные способы, и Java позволяет вам использовать тот вариант, к которому вы привыкли. Но большинство предпочитает первый вариант. Сами квадратные скобки своим видом напоминают коробки, поэтому вам будет просто запомнить.
Мы пока только объявили массив, но на самом деле его ещё не существует, так как не заполнен данными. Фактически значение массива равно null.
Определение массива
После объявления переменной массива, можно определить сам массив с помощью ключевого слова new с указанием типа и размера. Например, массив должен состоять из 10 целых чисел:
Можно одновременно объявить переменную и определить массив (в основном так и делают):
Если массив создаётся таким образом, то всем элементам массива автоматически присваиваются значения по умолчанию. Например, для числовых значений начальное значение будет 0. Для массива типа boolean начальное значение будет равно false, для массива типа char — ‘\u0000’, для массива типа класса (объекты) — null.
Последнее правило может запутать начинающего программиста, который забудет, что строка типа String является объектом. Если вы объявите массив из десяти символьных строк следующим образом:
То у вас появятся строки со значением null, а не пустые строки, как вы могли бы подумать. Если же вам действительно нужно создать десять пустых строк, то используйте, например, такой код:
Доступ к элементам массива
Обращение к элементу массива происходит по имени массива, за которым следует значение индекса элемента, заключённого в квадратные скобки. Например, на первый элемент нашего массива cats можно ссылаться как на cats[0], на пятый элемент как cats[4].
В качестве индекса можно использовать числа или выражения, которые создают положительное значение типа int. Поэтому при вычислении выражения с типом long, следует преобразовать результат в int, иначе получите ошибку. С типами short и byte проблем не будет, так как они полностью укладываются в диапазон int.
Инициализация массива
Не всегда нужно иметь значения по умолчанию. вы можете инициализировать массив собственными значениями, когда он объявляется, и определить количество элементов. Вслед за объявлением переменной массива добавьте знак равенства, за которым следует список значений элементов, помещенный в фигурные скобки. В этом случае ключевое слово new не используется:
Можно смешать два способа. Например, если требуется задать явно значения только для некоторых элементов массива, а остальные должные иметь значения по умолчанию.
Массивы часто используют в циклах. Допустим, 5 котов отчитались перед вами о количестве пойманных мышек. Как узнать среднее арифметическое значение:
Массив содержит специальное поле length, которое можно прочитать (но не изменить). Оно позволяет получить количество элементов в массиве. Данное свойство удобно тем, что вы не ошибётесь с размером массива. Последний элемент массива всегда mice[mice.length — 1]. Предыдущий пример можно переписать так:
Теперь длина массива вычисляется автоматически, и если вы создадите новый массив из шести котов, то в цикле ничего менять не придётся.
Если вам нужно изменять длину, то вместо массива следует использовать списочный массив ArrayList. Сами массивы неизменяемы.
Будьте осторожны с копированием массивов. Массив — это не числа, а специальный объект, который по особому хранится в памяти. Чтобы не загромождать вас умными словами, лучше покажу на примере.
Допустим, у нас есть одна переменная, затем мы создали вторую переменную и присвоили ей значение первой переменной. А затем проверим их.
Попробуем сделать подобное с массивом.
Мы скопировали первый массив в другую переменную и в ней поменяли третий элемент. А когда стали проверять значения у обоих массивов, то оказалось, что у первого массива тоже поменялось значение. Но мы же его не трогали! Магия. На самом деле нет, просто массив остался прежним и вторая переменная обращается к нему же, а не создаёт вторую копию. Помните об этом.
Если же вам реально нужна копия массива, то используйте метод Arrays.copyOf()
Если ваша программа выйдет за пределы индекса массива, то программа остановится с ошибкой времени исполнения ArrayOutOfBoundsException. Это очень частая ошибка у программистов, проверяйте свой код.
Практика
Хватит болтать. Давайте будем проверять все вышесказанное.
Напишем такой код:
Запустите приложение и убедитесь, что четвёртому элементу массива cats[3] присвоено значение 0. Проверьте таким образом все элементы массива. Далее присвойте шестому элементу значение 7 и проверьте снова результат.
Однако вернёмся к нашей картинке. У всех котов есть имена. Создадим массив из восьми строковых элементов и обратимся к одному из них:
Снова запускайте приложения и меняйте в последней строчке число, чтобы убедиться, что все работает.
Перебор значений массива
Массивы часто используются для перебора всех значений. Стандартный способ через цикл for
Нужно только помнить, что в этом случае мы не имеем доступа к индексу массива, что не всегда подходит для задач. Поэтому используется только для обычного перебора элементов.
Многомерные массивы
Для создания многомерных массивов используются дополнительные скобки:
Также массив может создаваться ключевым словом new:
Двумерный массив
Двумерный массив — это массив одномерных массивов. Если вам нужен двумерный массив, то используйте пару квадратных скобок:
Представляйте двумерный массив как таблицу, где первые скобки отвечают за ряды, а вторые — за колонки таблицы. Тогда пример выше представляет собой таблицу из четырёх рядов и трёх колонок.
1 | Васька | 121987102 |
2 | Рыжик | 2819876107 |
3 | Барсик | 412345678 |
4 | Мурзик | 587654321 |
Для двумерных массивов часто используются два цикла for, чтобы заполнить элементы данными слева направо и сверху вниз. Напишем такой код:
В данном примере мы сначала заполнили двухмерный массив данными, а затем снова прошлись по этому массиву для считывания данных.
Логическое представление данного двухмерного массива будет выглядеть следующим образом:
[0, 0] | [0, 1] | [0, 2] | [0, 3] |
[1, 0] | [1, 1] | [1, 2] | [1, 3] |
[2, 0] | [2, 1] | [2, 2] | [2, 3] |
Первое число в скобках обозначают ряд (строку), а второе число — столбец. Принято считать, что в массиве new int[M][N] первый размер означает количество строк, а второй — количество столбцов.
На экране после запуска примера мы увидим следующее:
При резервировании памяти под многомерный массив необходимо указать память только для первого измерения. Для остальных измерений память можно выделить отдельно.
В данном примере особого смысла в этом нет.
Еще одна интересная особенность при создании массива связана с запятой. Посмотрите на пример.
Вроде в конце используется лишняя запятая, но её наличие не приведёт к ошибке (только одна запятая). Это бывает удобно, когда надо скопировать или вставить кусок массива в коде. Кстати, метод deepToString() класса Arrays очень удобен для вывода двухмерных массивов.
Чтобы совсем сбить вас с толку, приведу ещё один правильный пример.
Я уже упоминал, что квадратные скобки можно использовать двумя способами. Сначала мы поставили скобки у типа переменной, а потом у имени переменной. При этом мы использовали в качестве имени имя класса Integer. Однако, Java догадывается, что на этот раз используется не класс, а имя и разрешает такой синтаксис. Но лучше так не выпендриваться.
Размер имеет значение
Размер двумерного массива измеряется интересным способом. Длина массива определяется по его первой размерности, то есть вычисляется количество рядов.
А если мы хотим узнать количество столбцов в ряду? Тогда указываете ряд, а затем вычисляете у него количество столбцов.
Не забывайте, что в массивах ряды могут содержать разное количество столбцов.
Сложить два массива
Предположим, у вас есть два массива, и вам нужно их соединить и получить общий массив.
Вместо типа double вы можете использовать другие типы. Вот например, пример сложения двух строковых массивов:
Взять часть массива
Аналогично, если вам нужно взять только часть из большого массива, то воспользуйтесь методом:
Здесь вы также можете использовать другие типы вместо double. Вот пример использования:
Перемешать элементы массива
Бывает необходимость перемешать элементы массива в случайном порядке. В интернете нашёл готовый метод по алгоритму Fisher–Yates (прим.: Fisher — это рыбак, который ловит рыбу, например, кот)
Подводим итоги
Помните, что размер массива фиксируется и не может меняться на протяжении его жизненного цикла. Если вам нужно изменять, то используйте ArrayList, который способен автоматически выделять дополнительное пространство, выделяя новый блок памяти и перемещая в него ссылки из старого.
При выходе за границу массива происходит исключение RuntimeException, свидетельствующее об ошибке программиста.
Метод arraycopy() — Копирование массива
Стандартная библиотека Java содержит статический метод System.arraycopy(), который копирует массивы значительнее быстрее, чем при ручном копировании в цикле for.
В аргументах arraycopy() передаётся исходный массив, начальная позиция копирования в исходном массиве, приёмный массив, начальная позиция копирования в приёмном массиве и количество копируемых элементов. Любое нарушение границ массива приведёт к исключению.
Разработчик Avi Yehuda написал программу, которая вычисляет время на копирование с помощью цикла for и с помощью метода arraycopy() на примере с миллионом элементов. Ручное копирование у него заняло 182 мс, с помощью метода arraycopy() — 12 мс. Разница колоссальна.
Вернёт списочный массив из двух элементов: Мурзик и Мурка.
Класс Arrays
Класс java.util.Arrays предназначен для работы с массивами. Он содержит удобные методы для работы с целыми массивами:
- copyOf() − предназначен для копирования массива
- copyOfRange() − копирует часть массива
- toString() − позволяет получить все элементы в виде одной строки
- sort() — сортирует массив методом quick sort
- binarySearch() − ищет элемент методом бинарного поиска
- fill() − заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умолчанию для массива)
- equals() − проверяет на идентичность массивы
- deepEquals() − проверяет на идентичность массивы массивов
- asList() − возвращает массив как коллекцию
Сортировка массива
Сортировка (упорядочение по значениям) массива a производится методами Arrays.sort(a) и Arrays.sort(a, index1, index2). Первый метод упорядочивает в порядке возрастания весь массив, второй — часть элементов (от индекса index1 до индекса index2). Имеются и более сложные методы сортировки. Элементы массива должны быть сравниваемы (поддерживать операцию сравнения).
Простой пример
Сортировка массива для ArrayAdapter
Массивы часто используются в адаптерах для заполнения данными компоненты Spinner, ListView и т.п.
Предположим, у вас есть массив строк и его нужно отсортировать перед отдачей массива адаптеру ArrayAdapter. Это позволит вывести строки в упорядоченном виде, например, в ListView:
У метода sort() есть перегруженные версии, где можно указать диапазон массива, в пределах которого следует произвести сортировку.
Копирование массивов
Метод Arrays.copyOf(оригинальный_массив, новая_длина) — возвращает массив-копию новой длины. Если новая длина меньше оригинальной, то массив усекается до этой длины, а если больше, то дополняется нулями.
Теперь первый массив останется без изменений, а со вторым массивом делайте что хотите. Смотрим на результат.
Можно создать увеличенную копию, когда копируются все значения из маленького массива, а оставшиеся места заполняются начальными значениями, например, нулями.
Метод Arrays.copyOfRange(оригинальный_массив, начальный_индекс, конечный_индекс) — также возвращает массив-копию новой длины, при этом копируется часть оригинального массива от начального индекса до конечного –1.
Метод Arrays.toString()
Если использовать вызов метода toString() непосредственно у массива, то получите что-то непонятное и нечитаемое.
Метод Arrays.toString(массив) возвращает строковое представление массива со строковым представлением элементов, заключённых в квадратные скобки. В примерах выше мы уже вызывали данный метод.
Метод deepToString() удобен для вывода многомерных массивов. Этот метод мы также уже использовали выше.
Метод Arrays.fill() — наполнение массива одинаковыми данными
Метод Arrays.fill() позволяет быстро заполнить массив одинаковыми значениями. У метода есть восемнадцать перегруженных версий для разных типов и объектов.
Метод fill() просто дублирует одно заданное значение в каждом элементе массива (в случае объектов копирует одну ссылку в каждый элемент):
Запустив код, вы увидите, что на экране по очереди выводятся значения:
Можно заполнить данными в нужном интервале за два прохода:
Сначала массив заполнится мяуканьем кота 4 раза, а потом на третью позицию попадает слово Гав!:
Как видите, метод заполняет весь массив, либо диапазон его элементов. Но получаемые одинаковые данные не слишком интересны для опытов, но пригодятся для быстрых экспериментов.
Метод equals() — сравнение массивов
Класс Arrays содержит метод equals() для проверки на равенство целых массивов. Чтобы два массива считались равными, они должны содержать одинаковое количество элементов, и каждый элемент должен быть эквивалентен соответствующему элементу другого массива.
Напишем код в своей учебной программе.
Мы создали два массива и заполнили их одинаковыми числами. При сравнении мы получим true. Добавим в код строчку кода, которая заменит один элемент во втором массиве:
Теперь при сравнении будет выдаваться false.
Задачи
Решите задачи. Ответы доступны зарегистрированным пользователям.
Имеется массив из четырёх чисел int[] numbers = <3, 9, 11, 15>;. Поменяйте местами первый и второй элемент массива. (Ответ)
Создайте массив из всех чётных чисел от 2 до 30 и выведите элементы массива на экран.
Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).
Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
Найти максимальное значение из массива
Задача: Имеется статистика, сколько мышей поймал кот Барсик за год по месяцам в виде массива:
Написать метод getMax(), который вычисляет максимальное значение из массива. Ну и метод getMin() для нахождения минимального значения.
Найти три наибольших числа из массива
Похожая задача — найти три наибольших числа из массива mice (предыдущая задача).
Перестановка элементов массива в обратном порядке
Задача: Имеется массив, нужно переставить элементы массива в обратном порядке.
Поместить нули в конец массива
Дан массив с числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Переместить все нули в конец массива.
Поместить нули в начало массива
Дан массив с числами 5, 4, 3, 0, 6, 0, 0, 5, 6, 0, 25, 0, 8, 7, 3, 0, 1, 1, 0, 6, 4. Переместить все нули в начало массива.
Найти индекс числа из массива
Есть массив, нужно определить индекс числа, который входит в этот массив.
Getting the array length of a 2D array in Java
I need to get the length of a 2D array for both the row and column. I’ve successfully done this, using the following code:
This prints out 5, 10 as expected.
Now take a look at this line:
Notice that I actually have to reference a particular row, in order to get the column length. To me, this seems incredibly ugly. Additionally, if the array was defined as:
Then the code would fail when trying to get the length. Is there a different (more intelligent) way to do this?
13 Answers 13
Column lengths differ per row. If you’re backing some data by a fixed size 2D array, then provide getters to the fixed values in a wrapper class.
A 2D array is not a rectangular grid. Or maybe better, there is no such thing as a 2D array in Java.
The arrays test and test2 are (more or less) the same.
It was really hard to remember that
Let’s understand why this is so and how we can figure this out when we’re given an array problem. From the below code we can see that rows = 4 and columns = 3:
Многомерные массивы
На JavaRush к «обычным» массивам приступают на 7 уровне квеста Java Syntax и далее по ходу курса они встречаются неоднократно. Иногда на протяжении курса попадаются задачи на двумерные массивы (или такие, которые можно решить с их помощью). А ещё двумерные массивы использованы в движке игр специального раздела “Игры на JavaRush”. Если вы ещё там не были, загляните и создайте пару-тройку игр. К условиям прилагаются подробные инструкции, и это послужит прекрасной тренировкой навыков программирования. Трёхмерный массив можно обнаружить в игре Space Invaders. Через него задаётся набор фреймов для анимации (и каждый из этих фреймов — двумерный массив). Если вы уже прошли квест JavaSyntax или просто уверенно себя чувствуете в программировании на Java, попробуйте написать собственную версию этой классической игры.
Что такое двумерный массив Java?
Объявление, создание и инициализация двумерных массивов
Процедура объявления и создания двумерного массива практически такая же, как и в случае одномерного: Этот массив имеет 3 строки и 4 столбца. Размер прямоугольного двумерного массива (они могут и не быть прямоугольными, об этом — чуть ниже), то есть общее количество элементов можно определить, перемножив количество строк на количество столбцов. Сейчас он проинициализирован (заполнен) значениями по умолчанию. То есть — нулями. Давайте заполним его нужными нам значениями. Как и в случае с одномерными массивами, можно провести процедуру инициализации быстрее: И в том, и в другом случае мы получим двумерный массив с тремя строками и четырьмя столбцами, заполненный целыми числами.
Вывод двумерного массива на экран
Быстрый вывод двумерного массива
“Длины” двумерного массива
Пример использования двумерного массива: шахматная доска
Двумерные массивы можно использовать для создания любого конечного двумерного поля, например, в играх, и в частности — в шахматах. Шахматную доску легко представить в виде двумерного массива. К этому можно “прикрутить” графику, а пока что — давайте зададим шахматное поле с помощью символов и выведем его в консоль. Нижняя левая клетка шахматной доски окрашена в чёрный цвет, следующая за ней — в белый, как и та, что над ней. Итак, цвет меняется каждый раз при переходе на соседнюю по стороне ячейку. Чтобы задавать шахматную расцветку не вручную, а с помощью алгоритма, можно использовать проверку на чётность: если сумма индекса строки и столбца — чётная или нуль, то клетка будет белой, иначе — чёрной. Для этой проверки в алгоритме используем оператор остатка от деления %. Поскольку мы работаем не с графикой, а с символами, обозначим белую клетку буквой W (white), а чёрную — буквой B (black). Вывод программы получается такой: W B W B W B W B B W B W B W B W W B W B W B W B B W B W B W B W W B W B W B W B B W B W B W B W W B W B W B W B B W B W B W B W Всё как на реальной шахматной доске, можете проверить. alt=»Многомерные массивы — 4″ width=»850″ />А теперь давайте напишем метод для правильной нумерации ячеек не на языке массивов, а на “шахматном” языке. Нижняя левая ячейка на доске называется А1, в то время как в нашем массиве это — chessBoard[7][0] . Сопоставим каждой паре индексов двумерного массива их “шахматный” эквивалент. Для этого используем две строки — » abcdefgh » и » 87654321 » (в обратном порядке — для простоты, чтобы шахматная 8 соответствовала нулевому столбцу). Теперь выведем в каждой ячейке не только её цвет, но также её номер, используя метод chessBoardCoord Вывод программы: Wa8 Bb8 Wc8 Bd8 We8 Bf8 Wg8 Bh8 Ba7 Wb7 Bc7 Wd7 Be7 Wf7 Bg7 Wh7 Wa6 Bb6 Wc6 Bd6 We6 Bf6 Wg6 Bh6 Ba5 Wb5 Bc5 Wd5 Be5 Wf5 Bg5 Wh5 Wa4 Bb4 Wc4 Bd4 We4 Bf4 Wg4 Bh4 Ba3 Wb3 Bc3 Wd3 Be3 Wf3 Bg3 Wh3 Wa2 Bb2 Wc2 Bd2 We2 Bf2 Wg2 Bh2 Ba1 Wb1 Bc1 Wd1 Be1 Wf1 Bg1 Wh1 Где We2 означает белую клетку с номером e2.
Пример использования двумерного массива: умножение матриц
Внимание! Этот пример требует элементарных знаний о матрицах. Здесь о них будет рассказано совсем немного, и эта информация рассчитана на тех, кто изучал, но несколько подзабыл матричную арифметику. Тем не менее, эти знания можно почерпнуть из открытых источников, в частности — из статьи в Википедии. Это удачный пример использования двумерных массивов, но без него можно двигаться дальше. Так что если он вам сейчас кажется непонятным с точки зрения математики, и вы не слишком-то хотите углубляться в неё, смело пропускайте пример. Если вы учили начала линейной алгебры, возможно, вы узнали в прямоугольных массивах прямоугольные матрицы. Где а11, а12… aNN — некоторые числа. На рисунке матрица даже не прямоугольная, а квадратная (число строк равно числу столбцов, но это не всегда так). В реальной жизни с такими матрицами сталкиваются редко, а вот в программировании и компьютерных науках — очень часто. В частности, их используют в компьютерной графике и игровых движках. Скажем, поворот какого-либо объекта на экране на любой угол можно программировать с помощью матрицы поворотов. В двумерном пространстве матрица поворотов выглядит так: alt=»Многомерные массивы — 6″ width=»300″ />Где тета — угол, на который нужно развернуть объект. Одинаковые по размерности матрицы можно складывать между собой, при этом сложение идёт поэлементно (складываем элементы с одинаковыми индексами). А вот операция умножения матриц уже менее привычная. Так, матрицы можно перемножить и получить матрицу-результат только если количество столбцов первой матрицы совпадает с количеством строк второй. Матрица-результат будет иметь столько же строк, как первая, и столько же столбцов, как вторая. Умножение производится следующим образом. Пусть у нас есть матрица a[l][m] и b[m][n] . В результате их перемножения мы должны получить матрицу c[l][n] . Для получения элемента c[0][0] матрицы-произведения, нужно нулевой элемент нулевой строки первой матрицы a[0][0] перемножить на нулевой элемент второй матрицы, затем первый элемент первой строки первой матрицы умножить на первый элемент первого столбца второй матрицы и так далее, после чего все получившиеся произведения сложить. Для получения второго элемента первой строки матрицы-результата проделываем ту же процедуру со второй строкой И так до конца строки. Затем переходим на следующую строку и повторяем процедуру, пока строки у нас не закончатся. То есть мы перемножаем строки первой матрицы со столбцами второй матрицы. Ниже — код для перемножения матриц. Можете его дополнить проверкой на соблюдение упомянутого выше условия о количестве строк и столбцов. Программа выводит следующий результат: 1 2 3 1 1 1 0 0 0
Непрямоугольные двумерные массивы
Трёхмерные массивы в Java
Следуя здравому смыслу и логике языка Java, трёхмерным массивом можно назвать «массив массивов массивов» или «массив, каждым элементом которого является двумерный массив». Причём эти двумерные массивы могут быть разными. Пример: Но чаще на практике встречаются трёхмерные массивы у которых все три величины определены сразу, аналог прямоугольных двумерных массивов. Как мы уже упоминали, трёхмерные и более массивы используются очень редко. Тем не менее, с помощью трёхмерного массива можно запрограммировать что-то интересное. Например, многоэтажную парковку. Каждый этаж можно считать двумерным массивом, а паркоместо — конкретным элементом трёхмерного массива. Элемент такого массива можно представить типом boolean со значением false, если место свободно и true, если место занято.
Многомерные массивы в реальной работе Java-программиста
В реальности большинство Java-разработчиков сталкиваются с многомерными массивами не слишком часто. Тем не менее, есть ряд задач, для которых эта структура данных подходит очень даже неплохо.