Arrays

Intro

Problem

  • Что если необходимо хранить в памяти множество однотипных данных, например: фамилии студентов в группе.

  • Создадим такое же количество переменных как и студентов!

  • А что если появится новый студент? Переписывать программу?!

Solution

Array

Array

Array

  • Массив — это конечная последовательность упорядоченных по индексу элементов ОДНОГО типа

  • Доступ к каждому элементу последовательности осуществляется по индексу.

Arrays

Array

Array

  • Размер (длина) массива — это общее количество элементов в массиве.

  • Размер массива задаётся при создании массива и не может быть изменён в дальнейшем.

Array

Array

Syntax

dataType[] arrayName;
dataType []arrayName;
dataType arrayName[];

Example

int[] array1; // best practice
int []array2;
int array3[];

Example

int nums[]; // объявили
nums = new int[4]; // инициализировали (массив из 4 чисел)

Example

// объявим и инициализируем массив из 4 чисел
int nums[] = new int[4];
// объявим и инициализируем массив из 15 чисел
int[] nums2 = new int[15];

Example

// объявим и инициализируем массив из 4 чисел
int[] nums = new int[4];
// инициализируем 0-ой элемент массива
nums[0] = 1;
// инициализируем 1-ый элемент массива
nums[1] = 2;
// инициализируем 2-ой элемент массива
nums[2] = 4;
// инициализируем 3-ий элемент массива
nums[3] = 100;
System.out.println(nums[2]); // 4

Example

// эти два способа равноценны
int[] nums = new int[] {1, 2, 3, 5};
int[] nums2 = {1, 2, 3, 5}; // anonymous array
System.out.println(nums.length); // длина массива 4

Example

int[] array = new int[10];
Random rand = new Random();
for (int i = 0; i < array.length; i++) {
    array[i] = rand.nextInt(10);
}

System.out.println("initial array:");
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + "   ");
}

for (int i = 0; i < array.length; i++) {
    array[i] += 10;
}

System.out.println("new array:");
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + "   ");
}

Default initialization for Array

Default initialization for Array

InitializationContent

new boolean[3]

{false, false, false}

new char[3]

{'\u0000', '\u0000', '\u0000'}

new int[3]

{0, 0, 0}

new double[3]

{0.0, 0.0, 0.0}

new String[3]

{null, null, null}

Error with Array

Array in memory

Array in memory

Error

int[] marks = {9, 6, 8, 10};
System.out.println(marks[4]);
System.out.println(marks[-1]);

Error

ArrayIndexOutOfBoundsException

throws ArrayIndexOutOfBoundsException

Multidimensional Array

Multidimensional Array

Массивы бывают:

  • одномерные

  • двумерные

  • n-мерные

Multidimensional Array

Multidimensional Array

Syntax

int[][] array1;
int [][]array2;
int array3[][];

Example

int[] nums1 = new int[] {0, 1, 2, 3, 4, 5};
int[][] nums2 = {
    {0, 1, 2},
    {3, 4, 5}
};

Example

int[][] nums2 = {{0, 1, 2}, {3, 4, 5}};

// установим элемент первого столбца второй строки
nums2[1][0] = 44;
System.out.println(nums2[1][0]);

Default initialization for Array

InitializationContent

new int[3][]

{null, null, null}

Multidimensional Arrays

Multidimensional Array

Example

int[][] nums = new int[3][];
nums[0] = new int[2];
nums[1] = new int[3];
nums[2] = new int[5];
...

Example

int[][] array = {
    {1, 1, 1, 1},
    {1, 1, 1, 1},
    {1, 1, 1, 1}
};
int sum = 0;
for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[0].length; j++) {
         sum += array[i][j];
    }
}
System.out.println(sum);

Сортировка массивов

Сортировка массивов

  • Сортировка выбором.

  • Сортировки с помощью обменов:

    • Пузырьковая сортировка.

    • Шейкерная сортировка.

  • Сортировка с помощью включения.

  • Сортировка слиянием.

  • Сортировка с помощью разделения.

Сортировка выбором

int[] array = {8, 5, 2, 6, 9, 3, 1, 4, 0, 7};

for (int i = 0; i < array.length; i++) {
    int minIndex = i;
    for (int j = i + 1; j < array.length; j++) {
        if (array[j] < array[minIndex]) {
            minIndex = j;
        }
    }
    int temp = array[i];
    array[i] = array[minIndex];
    array[minIndex] = temp;
}

for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + “    ”);
}

Пузырьковая сортировка

int[] array = {5, 4, 3, 1, 2};
for (int i = array.length - 1; i > 0; i--) {
    for (int j = 0; j < i; j++) {
        if (array[j] > array[j + 1]) {
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + "   ");
}