Урок 5

Массивы


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

Массив - это группа однотипных переменных, для обращения к которым используется общее имя. В Java допускается создание массивов любого тина и paзной размерности. Доступ к конкретному элементу массива осуществляется по его индексу. Массив предоставляют удобный способ группирования связанной вместе информации.

1. Одномерные массивы

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

тип[] имя_переменной;

где параметр тип обозначает тип элемента массива, называемый также базовым типом.

Пример 1. Пример объявления массивов

int month_days[];
double[] month_salaries;
Выделение памяти под массив:
имя_переменной = new тип [размер];
Например:
args = new String[3];
int[] values = new int[45];

Пример 2. Пример объявления массива

public class Array1{
    public static void main(String[] args) {
        int[] month_days;
        month_days = new int[12];
        month_days[0] = 31;
        month_days[1] = 28;
        month_days[2] = 31;
        month_days[3] = 30;
        month_days[4] = 31;
        month_days[5] = 30;
        month_days[6] = 31;
        month_days[7] = 31;
        month_days[8] = 30;
        month_days[9] = 31;
        month_days[10] = 30;
        month_days[11] = 31;
        System.out.println("B апреле " + month_days[3] + " дней.");
    }
}

Пример 3. Пример инициализации одномерного массива

public class Array2{
    public static void main(String[] args) {
        int[] month_days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        System.out.println("B апреле " + month_days[3] + " дней.");
    }
}

Пример 4. Пример безымянного массива

import java.util.Arrays;

public class Array3 {
    public static void main(String[] args) {
        int[] testScores = {1, 2, 3, 4};
        System.out.println(Arrays.toString(testScores));
        testScores = new int[]{4, 7, 2};
        System.out.println(Arrays.toString(testScores));

        print(new int[]{4, 6, 2, 3});
    }

    public static void print(int[] array) {
        System.out.println(Arrays.toString(array));
    }
}

2. Многомерные массивы

Многомерные массивы представляют собой массивы массивов.

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

int twoD [][] = new int [4][5];

Концептуальное представление массива размерностью 4 на 5

Концептуальное представление массива размерностью 4 на 5

Пример 5. Пример двухмерного массива

public class TwoDArray1 {
    public static void main(String[] args) {
        int[][] twoD = new int[4][5];
        int i, j, k = 0;
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 5; j++) {
                twoD[i][j] = k++;
            }
        }
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 5; j++) {
                System.out.print(twoD[i][j] + " ");
            }
            System.out.println();
        }
    }
}

Представление многомерного массива в памяти

int twoD [][] = new int [3][3];

Представление многомерного массива в памяти

Пример двухмерного массива c разной размерностью

Пример двухмерного массива c разной размерностью

Пример 6. Пример двухмерного массива с разной размерностью

import java.util.Arrays;

public class TwoDArray2 {
    public static void main(String[] args) {
        int[][] twoD = new int[4][];
        twoD[0] = new int[1];
        twoD[1] = new int[2];
        twoD[2] = new int[3];
        twoD[3] = new int[4];
        int i, j, k = 0;
        for (i = 0; i < 4; i++) {
            for (j = 0; j < i + 1; j++) {
                twoD[i][j] = k++;
            }
        }
        System.out.println(Arrays.deepToString(twoD));
    }
}

Пример 7. Инициализация двухмерного массива

import java.util.Arrays;

public class TwoDArray3 {
    public static void main(String[] args) {
        double[][] array = {
                {0, 1, 2, 3},
                {4, 5, 6, 7},
                {8, 9, 10, 11},
                {12, 13, 14, 15}
        };
        System.out.println(Arrays.deepToString(array));
    }
}

Пример 8. Получение размера массива

public class ArraySize {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3, 4};
        int[][] array2 = {{1, 1, 1}, {2, 2, 2}};
        System.out.println("Размер массива array1 = " + array1.length);
        System.out.println("Размер массива array2 = " + array2.length);
        System.out.println("Размер 1-строки массива array2 = "
                + array2[0].length);
    }
}

3. Ключевые моменты использования массивов

  1. В Java допускается создание массивов любого типа и paзной размерности.
  2. Доступ к конкретному элементу массива осуществляется по его индексу. 
  3. Индексация начинается с нуля.
  4. Для создания массива требуется выделение памяти с помощью оператора new или инициализации.
  5. Значения элементов неинициализированных массивов, для которых выделена память, устанавливается в значение по умолчанию для заданного типа.
  6. Для задания начальных значений массивов существует специальная форма инициализатора.
  7. Получение размера массива: nums.length.

4. Полезные методы при работе с массивами

4.1. Arrays.sort()

Пример 9. Сортировка массива

import java.util.Arrays;

public class ArraysSort1 {
    public static void main(String[] args) {
        int[] array = new int[]{3, 1, 5, 6, 8};
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
    }
}

4.2. Arrays.binarySearch()

Возвращает номер элемента массива. Если же искомого элемента нет, то возвращается -(position + 1), где position - позиция элемента где он МОГ БЫ БЫТЬ. Массив должен быть отсортирован, иначе результат вызова метода будет не определен.

Пример 10. Поиск элемента массива

import java.util.Arrays;

public class BinarySearch1 {
    public static void main(String[] args) {
        int[] array1 = {10, 20, 30, 40};
        int pos1 = Arrays.binarySearch(array1, 20);
        int pos2 = Arrays.binarySearch(array1, 25);
        System.out.println(pos1);
        System.out.println(pos2);
    }
}

4.3. System.arraycopy()

Пример 11. Копирование массива

import java.util.Arrays;

public class ArrayCopy1 {
    public static void main(String[] args) {
        int[] arraySource = {1, 2, 3, 4, 5, 6};
        int[] arrayDestination = {0, 0, 0, 0, 0, 0, 0, 0};

        System.out.println("arraySource: " + Arrays.toString(arraySource));
        System.out.println("arrayDestination: "
                + Arrays.toString(arrayDestination));

        System.arraycopy(arraySource, 1, arrayDestination, 2, 3);
        System.out.println("arrayDestination after arrayCopy: "
                + Arrays.toString(arrayDestination));
    }
}

Пример 12. Копирование массива из себя в себя

Можно копировать из себя в себя с перекрытием областей:

import java.util.Arrays;

public class ArrayCopy2 {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
        System.out.println(Arrays.toString(array));

        System.arraycopy(array, 1, array, 3, 3);
        System.out.println(Arrays.toString(array));
    }
}

4.4. Arrays.toString()

4.5. Arrays.deepToString()



0 comments
Leave your comment: