0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Массивы в Java. Создание и обработка

Содержание

Массивы в Java. Создание и обработка.

Сегодня речь пойдёт о массивах в Java. Массивы – это та самая структура данных, без которой не обходится, пожалуй, ни одна программа. Массивы предназначены для того, чтобы хранить несколько значений в одной структуре с возможностью доступа по индексу (номеру элемента). При этом мы сможем перебирать однотипные значения в цикле. Образно можно представить себе массив как книжную полку с книгами. При этом мы всегда можем попросить Java “подать” пятую слева книгу, или последнюю. Конечно, по гибкости массивы уступают коллекциям, но по скорости они далеко впереди. Кроме того, именно в массивах можно хранить примитивные типы данных (такие как int, double и т.д.). У коллекций такой возможности нет. Коллекции могут хранить только типы данных, унаследованные от Object. Из минусов массивов можно назвать, пожалуй, только то, что после создания уже нельзя изменить его размер, хотя минус ли это?
Массивы в Java немного отличаются от массивов во многих других языках программирования. Первое, что нужно понимать, это то, что объявив переменную следующим образом:

мы не получим массив. Пока что у нас есть только переменная, которая должна хранить ссылку на массив, который ещё нужно создать. Как и любой другой объект в Java, массив создаётся оператором new.

Вот теперь у нас есть свой, настоящий и осязаемый массив целых чисел. Можно получать его элементы по индексу, присваивать им значения и вообще делать всё, что захочется. Массив также может быть многомерным. Это как книжный шкаф с несколькими полками. Теперь чтобы указать, какую книгу мы хотим получить, нужно назвать номер полки и позицию книги на ней. Например если массив двумерный, то элементами этого массива также являются массивы. Объявить многомерный массив можно так:

Не сильно отличается от одномерного. Создавать и использовать его не на много сложнее:

Кстати, для обработки массивов (например сортировка массива) не всегда нужно писать дополнительный код. Всё уже написано до нас и проверено временем. Дело в том, что в стандартной библиотеке Java есть класс, который, порой, просто незаменим при работе с массивами. Часть рутинных операций реализована доблестными программистами Sun в его методах. Посмотрим, что же нам предлагают:

  • asList – метод, который формирует оболочку List для переданного массива.
  • binarySearch – метод выполняет бинарный поиск по массиву, переданному первым параметром, значения из второго параметра.
  • copyOf – копирует переданный массив. Вторым параметром передаём количество элементов, которое хотим получить в новом массиве.
  • copyOfRange – то же, что и copyOf, но передаём индекс начала и индекс конца области копирования.
  • deepEquals – сравнивает два массива, учитывая, что они могут быть многомерными
  • deepHashCode – высчитывает хэш массива, учитывая, что они могут быть многомерными
  • deepToString – преобразует массив в строку, учитывая, что они могут быть многомерными
  • equals – сравниват массивы
  • fill – заполняет массив одним и тем же значением, переданным вторым параметром
  • hashCode – считает хэш
  • sort – сортирует массив
  • toString – преобразует массив в строку

Замечу, что функции binarySearch, copyOf, copyOfRange, equals, fill, hashCode, sort и toString перегружены для массивов всех примитивных типов и для массивов объектов Object. В приведённо ниже примере мы будем использовать только два метода: toString и sort.
Ближе к делу. Так как сегодняшний пример посвящён массивам в Java и способам работы с ними, я выбрал задачу, которую, наверное, задают студентам всех вузов. Напишем небольшую базу данных людей. Не будем вешать на них ярлыки профессий, просто люди. Они у нас есть, нам нужно иметь возможность задать для каждого возраст, имя, распечатать список или отдельного человека и отсортировать список.
Начнём с класса, который будет содержать информацию об отдельном человеке. В нём нет ничего сложного, по этому просто приведу его код.

Читать еще:  Как сделать портативную зарядку из аккумулятора. Портативная зарядка собственными руками

Обращу ваше внимание на то, что мы перегрузили метод класса Object toString(). Этот метод вызывается тогда, когда требуется преобразовать значение в строковое. Теперь мы можем очень просто вывести на экран информацию о человеке, написав

на экране увидим вот такую строку: “ “.
Теперь необходим класс, в котором будет храниться список людей в массиве и который будет выполнять простейшие операции с этим списоком.

Вернёмся к методу сортировки. Тут используем Arrays.sort() – этот метод и сортирует элементы массива. Но, к сожалению, по умолчанию он сортирует только примитивные типы и строки. Для того, чтобы мы могли сортировать массив объектов типа Person, есть два выхода: реализовать в этом классе интерфейс Comparable или передать в sort() объект Comparator, который сможет сравнить наших людей. Так как этот класс будет использоваться только в одном месте программы, мы не будем давать ему имя, а объявим сразу по месту требования. Давайте внимательно посмотрим на код. Выглядит так, как будто мы создаём объект интерфейса, но так на самом деле делать нельзя, по этому после new Comparator

() мы опишем реализацию методов.
Теперь нам нужен класс, который предоставит пользователю интерфейс в виде меню и будет выполнять все операции с базой данных, интерпретируя команды пользователя. В этом классе нет ничего сложного, просто несколько часто встречающихся операций, по этому ограничусь комментариями в коде. Я думаю читатель со средним знанием языка программирования Java без труда разберётся в этом коде.

15. Java — Массивы

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

Вместо объявления отдельных переменных, таких как number0, number1, . и number99, Вы объявляете одну переменную массива, например, numbers и используете numbers[0], numbers[1], . и numbers[99], для отображения отдельных переменных.

Данная статья ознакомит Вас как в Java объявить массив переменных, создать и обрабатывать массив с помощью индексированных переменных.

Содержание

Объявление массива

Чтобы использовать массив в программе, необходимо объявить переменную для ссылки на массив, и Вы должны указать тип массива, который может ссылаться на переменную. Синтаксис для объявления переменной массива:

Примечание: стиль dataType[] arrayRefVar является предпочтительным. Стиль dataType arrayRefVar[] происходит из языка C/C++ и был принят в Java для C/C++-программистов.

Пример

Следующие фрагменты кода примеры использования данного синтаксиса:

Создание массива

В Java создать массив можно с помощью оператора new с помощью следующего синтаксиса:

Вышеуказанное объявление делает две вещи:

  • Создает массив, используя new dataType[arraySize];
  • Ссылка на недавно созданный массив присваивается переменной arrayRefVar.

Объявление переменной, создание и присвоение переменной ссылки массива могут быть объединены в одном операторе, как показано ниже:

В качестве альтернативы массивы в Java можно создавать следующим образом:

Элементы массива доступны через индекс. Отсчет индексов ведется от 0; то есть они начинают от 0 и до arrayRefVar.length-1.

Пример

Следующий оператор объявляет массив переменных myList, создает массив из 10 элементов типа double и присваивает ссылку myList:

Изображение отображает массив myList. Здесь myList имеет десять значений double и индексы от 0 до 9.

Работа с массивами

При работе с элементами массива, часто используют цикл for или цикл foreach потому, что все элементы имеют одинаковый тип и известный размер.

Пример

Полный пример, показывающий, как создавать, инициализировать и обработать массив:

Получим следующий результат:

Цикл foreach

JDK 1.5 представила новый цикл for, известный как цикл foreach или расширенный цикл for, который позволяет последовательно пройти весь массив без использования индекса переменной.

Пример

Следующий код отображает все элементы в массиве myList:

Получим следующий результат:

Передача массива в метод

Также как можно передать значение примитивного типа в метод, можно также передать массив в метод. Например, следующий метод отображает элементы в int массиве:

Его можно вызвать путем передачи массива. Например, следующий оператор вызывает метод printArray для отображения 3, 1, 2, 6, 4 и 2:

Читать еще:  Как сохранить изображение через f12 в браузере. Сохранение любой картинки в Chrome, Opera, FireFox

Возврат массива из метода

Метод может также возвращать массив. Например, метод, показанный ниже, возвращает массив, который является реверсирование другого массива:

Методы для массива

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

Пример 1: создание, объявление переменных, определение (выделение памяти) и инициализация массива

В качестве примера возьмем тип данных int. Вы же можете использовать любой другой тип данных.

Пример 2: длина массива

Узнать размер массива в Java можно с помощью метода length(). Данный метод позволяет определить размерность массива.

Получим следующий результат:

Пример 3: максимальный элемент массива

Простые способы для того, чтобы найти максимальное число в массиве в Java. Сперва воспользуемся методом Math.max().

Получим следующий результат:

Ещё один пример нахождения максимального числа в массиве в Java. Здесь мы не будем использовать какие-либо методы.

Получим следующий результат:

Пример 4: минимальный элемент массива

Написанный ниже код практически ничем не отличается от кода, описанного в примере 3. Он в точности наоборот, просто здесь мы ищем минимальное число в массиве в Java. В первом способе воспользуемся методом Math.min().

Получим следующий результат:

Ещё один пример нахождения максимального числа в массиве в Java. Здесь мы не будем использовать какие-либо методы.

Получим следующий результат:

Пример 5: сумма массива

В этом примере рассмотрим как получить сумму элементов массива в Java.

Получим следующий результат:

А в этом примере используем улучшенный цикл for, чтобы найти сумму массива.

Получим следующий результат:

Пример 6: вывод массива

В данном примере рассмотрим как вывести массив на экран в Java.

Получим следующий результат:

Пример 7: вывод четных и нечетных элементов массива

В примере показано как вывести четные и нечетных элементы массива в Java.

Получим следующий результат:

Пример 8: вывод элементов массива с четным и нечетным индексом

В примере показано как вывести на экран элементы массива с четным и нечетным индексом.

Массив

В любом языке программирования используются массивы, удобные для работы с большим количеством однотипных данных. Если вам нужно обработать сотни переменных, то вызывать каждую по отдельности становится муторным занятием. В таких случаях проще применить массив. Для наглядности представьте себе собранные в один ряд пустые коробки. В каждую коробочку можно положить что-то одного типа, например, котов. Теперь, даже не зная их по именам, вы можете выполнить команду Накормить кота из 3 коробки. Сравните с командой Накормить Рыжика. Чувствуете разницу? Вам не обязательно знать котов по именам, но вы всё равно сможете справиться с заданием. Завтра в этих коробках могут оказаться другие коты, но это не составит для вас проблемы, главное знать номер коробки, который называется индексом.

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

Объявление массива

Переменную массива можно объявить с помощью квадратных скобок:

Возможна и альтернативная запись:

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

Мы пока только объявили массив, но на самом деле его ещё не существует, так как не заполнен данными. Фактически значение массива равно null.

Определение массива

После объявления переменной массива, можно определить сам массив с помощью ключевого слова new с указанием типа и размера. Например, массив должен состоять из 10 целых чисел:

Можно одновременно объявить переменную и определить массив (в основном так и делают):

Если массив создаётся таким образом, то всем элементам массива автоматически присваиваются значения по умолчанию. Например, для числовых значений начальное значение будет 0. Для массива типа boolean начальное значение будет равно false, для массива типа char — ‘u0000’, для массива типа класса (объекты) — null.

Читать еще:  Как исправить: Ваш компьютер необходимо восстановить. Код ошибки: 0xc0000225

Последнее правило может запутать начинающего программиста, который забудет, что строка типа 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:

Двумерный массив

Двумерный массив — это массив одномерных массивов. Если вам нужен двумерный массив, то используйте пару квадратных скобок:

Представляйте двумерный массив как таблицу, где первые скобки отвечают за ряды, а вторые — за колонки таблицы. Тогда пример выше представляет собой таблицу из четырёх рядов и трёх колонок.

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector