Шаг 14.
Язык программирования Java.
Операции над массивами

На этом шаге мы рассмотрим операции над массивами

Все операции над массивами лежат в пакете java.util, и реализованы в классе Arrays (о том что такое пакеты и классы мы рассмотрим позднее). Для того чтобы использовать операции над массивами, нужно подключить к программе данный класс. Это делается с помощью служебного слова import. Подключение нужно проводить до объявление всех классов в файле программы. Приведем ниже пример подключения класса Arrays из пакета java.util:

 import java.util.Arrays;

Рассмотрим следующие операции над массивами:

  1. Копирование массивов.
  2. Сортировка массивов.
  3. Бинарный поиск элемента.
  4. Операция fill (заполнение массива одним значением).

Рассмотрим ниже каждую операцию.

  1. Копирование.

    Допустим у нас есть следующий фрагмент программы:

    int[] a = {17, 19, 23, 29, 31, 37}; /*Еще один способ создания массива*/
    int[] b = a;
    

    Некоторые могут подумать, что в данном примере будут созданы 2 одинаковых массива. Но это мнение ошибочное. Переменные a и b на самом деле являются сылками на то место памяти, где хранится наш массив. Когда мы во второй строке b присваиваем значение, которое хранится в переменной a, то мы присваиваем не массив, а адрес памяти где расположен массив a. Из этого следует, что переменные a и b ссылаются на один и тотже массив. И когда мы, например, присвоим второму элементу массива b значение 0, то массив a будет иметь следующий вид: {17, 0, 23, 29, 31, 37}. Если требуется скопировать все элементы одного массива в другой, в Java для этого существует функция copyOf. Приведем пример использования функции копирования:

    import java.util.Arrays;
    
    public class PrimerFirst {
        public static void main(String[] args) {
            int[] a = {17, 19, 23, 29, 31, 37}; /*Создаем массив*/
            int[] b = Arrays.copyOf(a, a.length);/*Копируем содержимое массива а в b*/
    
    	 /*Выводим содержимое массивов на экран*/
            System.out.print("Array a: ");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }
            System.out.println();
    
            System.out.print("Array b: ");
            for (int i = 0; i < b.length; i++) {
                System.out.print(b[i] + " ");
            }
            System.out.println();
    
    	/*Изменяем вторые элементы массивов*/
            a[1] = 25;
            b[1] = 55;
    
    	/*Выводим содержимое массивов на экран*/
            System.out.print("Array a: ");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }
            System.out.println();
    
            System.out.print("Array b: ");
            for (int i = 0; i < b.length; i++) {
                System.out.print(b[i] + " ");
            }
            System.out.println();
        }
    }
    

    Проект можно взять здесь.


    Рис. 1. Вывод программы

    В данном примере мы использовали одно свойство массивов - length. Это свойство содержит в себе размер массива.

  2. Сортировка.

    В задачах часто нужно сортировать элементы массива по какому-либо признаку. Например, сортировка по неубыванию. В Java уже такая операция реализована. Для сортировки массивов нужно вызвать функцию sort из класса Arrays. Приведем ниже пример использования данной операции:

    import java.util.Arrays;
    
    public class PrimerSecond {
        public static void main(String[] args) {
            int[] a = {17, 19, 23, 29, 31, 37}; /*Создание массива*/
            Arrays.sort(a);  /*Сортировка массива по неубыванию*/
    
    	 /*Вывод содержимого массива на экран*/
            System.out.print("Array: ");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }
        }
    }
    

    Проект можно взять здесь.


    Рис. 2. Вывод программы

  3. Бинарный поиск элемента.

    Предположим, что у нас дан отсортированный массив длины 218 и нужно очень много раз, допустим 106, определять наличие в массиве элемента. Можно для этого каждый раз искать нужный нам элемент, проходя по каждому элементу массива, пока не будет достигнут нужный нам элемент, либо не будет достигнут конец массива. Такая операция простая, но при большом массиве крайне долгая. В Java существует операция бинарного поиска элемента, которая проверит наличие элемента не более чем за 18 сравнений (подробнее об бинарном поиске можно почитать здесь). Она реализована в функции binarySearch. Если в массиве есть искомый элемент, то она вернет его индекс, иначе вернет отрицательное значение r (a - r - 1 - это позиция куда, должен быть вставлен искомый элемент, чтобы не нарушить порядок сортировки). Приведем ниже пример использования бинарного поиска.

    import java.util.Arrays;
    
    public class PrimerThird {
        public static void main(String[] args) {
            int[] a = new int[10];
            for (int i = 0; i < 10; i++) {
                a[i] = i;
            }
    
    	/*результат поиска будет равен 1*/
            System.out.println(Arrays.binarySearch(a, 1));
    	/*результат поиска будет равен 2*/
            System.out.println(Arrays.binarySearch(a, 2));
    	/*результат поиска будет равен -1*/
            System.out.println(Arrays.binarySearch(a, -1));
    	/*результат поиска будет равен -11*/
            System.out.println(Arrays.binarySearch(a, 10));
        }
    }
    

    Проект можно взять здесь.


    Рис. 3. Вывод программы

  4. Операция fill.

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

    import java.util.Arrays;
    
    public class PrimerFourth {
        public static void main(String[] args) {
            int[] a = {17, 19, 23, 29, 31, 37}; /*Создаем массив*/
    	/*Присваиваем элементам, стоящие на позициях от 1 до 4, значение 10*/
            Arrays.fill(a, 1, 4, 10);
    
    	/*Выводим содержимое массива на экран*/
            System.out.print("Array: ");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }
        }
    }
    

    Проект можно взять здесь.


    Рис. 4. Вывод программы

На следующем шаге мы рассмотрим многомерные массивы

Предыдущий шаг Содержание Следующий шаг