Массивы. Часть-1. Одномерные массивы

Понятие массива. Одномерные массивы


Содержание



1. Что такое массив? Какое предназначение массивов в программе

Массив – это набор (группа) однотипных элементов, объединенных одним именем. Массивы разрешают удобно группировать информацию и получать доступ к ней.

Массивы могут быть одномерными, двумерными и многомерными.

Позиция элемента в массиве называется индексом. В языке Java позиция первого элемента в массиве начинается с нуля.

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

Массив считается двумерным, если для определения местоположения элемента в массиве нужно указать значения двух индексов.

 

2. Какие типы данных могут принимать элементы массива?

Элементы массива могут быть любого типа, допустимого в языке Java.

Этот тип определяет тип данных любого из элементов, которые составляют данный массив.

Подробное описание примитивных типов данных можно найти здесь.

 

3. Как выглядит общая форма описания одномерного массива?

Общая форма описания одномерного массива:

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

или

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

где

  • тип — означает тип элемента массива, который называется также базовым типом;
  • имя_переменной — название массива, по которому будет осуществляться доступ к элементам массива.

После этого нужно выделить память под массив. Общая форма выделения памяти имеет вид:

имя_переменной = new тип[размер];

где

  • тип – базовый тип элементов массива;
  • размер – число элементов массива.

Выделение памяти для элементов массива можно осуществлять сразу после его описания. В этом случае общая форма описания массива имеет вид:

тип имя_переменной[] = new тип[размер];

или

тип[] имя_переменной = new тип[размер];

При выделении памяти элементы массива заполняются:

  • нулевыми значениями для числовых типов;
  • значениями false для логического типа boolean;
  • пустыми значениями null для ссылочных типов.

Итак, процесс создания массива проходит в два этапа:

  • объявляется переменная нужного типа массива;
  • с помощью оператора new выделяется память для элементов массива.

 

4. Пример создания и использования одномерного массива с именем d, в котором есть 5 элементов типа int.
// описание массива с именем d в котором элементы имеют тип int
int d[];
d = new int[5]; // выделение памяти для 5 элементов типа int массива d

// доступ к элементам массива d
d[2] = -8; // в 3-й элемент массива записать число -8
d[0] = -1000; // в 1-й элемент массива записать число -1000
d[4] = 29;
d[5] = 300; // ошибка - ArrayIndexOutOfBoundsException: 5

В данном примере создание массива можно осуществлять разными способами.

Способ 1.

int d[];
d = new int[5];

Способ 2.

int[] d;
d = new int[5];

Способ 3.

int[] d = new int[5];

Способ 4.

int d[] = new int[5];

 

5. Пример создания и использования одномерного массива f, содержащего 10 элементов типа float.
float[] f; // массив с именем f, элементы массива имеют тип float
f = new float[10]; // выделение памяти для 10 элементов массива f

f[0] = 0.0f;
f[1] = 1.0f;
f[2] = 2.0f;
f[3] = 3f;
f[4] = 4.0f;
f[5] = 5.0f;

 

6. Пример создания и использования одномерного массива x, в котором 20 элементов имеют тип double.
// описание массива x из 20 элементов типа double
double x[] = new double[20];

x[8] = -3.3998;
x[3] = -5.5; // x[3] = -5.5
x[3] = x[7]; // x[3] = 0.0

 

7. Пример фрагмента кода обнуления одномерного массива с именем x, содержащего 20 чисел типа double.

В данном примере обнуляется массив вещественных чисел типа double.

double x[] = new double[20]; // описание массива x из 20 элементов типа double
for (int i=0; i<x.length; i++)
    x[i] = 0.0;

 

8. Пример вычисления суммы элементов одномерного массива M, в котором есть 50 вещественных чисел.
// вычисление суммы элементов массива
float[] M = new float[50];
float sum = 0; // искомая сумма

// заполнение массива данными
// ...

// цикл вычисления суммы
for (int i=0; i<M.length; i++)
    sum = sum + M[i];

 

9. Пример поиска максимального значения в массиве из 100 целых чисел.
// поиск максимального значения
int[] A = new int[100]; // объявление массива
int max; // искомое значение

// заполнение массива данными
// ...

// цикл поиска максимального значения
max = A[0];
for (int i=1; i<A.length; i++)
    if (max < A[i])
        max = A[i];

 

10. Пример сортировки одномерного массива вещественных чисел методом «пузырька».
float M[] = new float[5]; // объявление массива из 5 элементов
float x; // вспомогательная переменная

// ввод массива M, заполнение значениями
// ...

// цикл сортировки методом "пузырька"
for (int i=0; i<M.length-1; i++)
    for (int j=i; j>=0; j--)
        if (M[j]>M[j+1])
        {
            x = M[j];
            M[j] = M[j+1];
            M[j+1] = x;
        }

 

11. Как в Java осуществить присвоение одного массива другому? Метод clone().

Для глубокого копирования массивов используется метод clone() из библиотеки Java.

Пример присвоения одного массива другому с использованием метода clone().

float[] f; // массив с именем f, элементы массива имеют тип float
float f2[];
f = new float[5]; // выделение памяти для 5 элементов массива f
f2 = new float[5]; // выделение памяти для массива f2

f[0] = 0.0f;
f[1] = 1.0f;
f[2] = 2.0f;
f[3] = 3f;
f[4] = 4.0f;

// метод clone() - глубокое копирование
f2 = f.clone(); // массивы f и f2 - разные массивы
f[2]=3.8f; // f2[2] = 3.8; f[2] = 2.0

Если написать:

f2 = f;

то обе переменные f и f2 будут указывать на один участок памяти.

 

12. Как осуществляется начальная инициализация одномерного массива?

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

Примеры инициализации массивов разных размерностей и разных типов их элементов.

// инициализация одномерного массива из 5 чисел типа double
double M[] = { 3.8, -2.55, 0.23, -11.45, 3.85 };
// инициализация одномерного массива из 5 чисел типа byte
byte[] B = { -1, 25, 44, -12, 14 };
// инициализация массива из 10 элементов типа char
char C[] = { 'a', 'b', 'c', 'd', '5', ';', '9', 'N', '!', '

 

13. Пример описания одномерного массива классов.

Пусть задан класс с именем MyPoint. Нужно описать объект-переменную, который является массивом из 3 классов MyPoint.

// объявление класса MyPoint
class MyPoint
{
    int x; // внутренняя переменная x
    int y; // внутренняя переменная y

    // реализация методов класса
    public void SetXY(int xx, int yy)
    {
        x = xx;
        y = yy;
    }

    public int GetX()
    { return x; }

    public int GetY()
    { return y; }
}

...

// использование массива классов в программе
// объявление переменной типа массив классов MyPoint
MyPoint[] mp;

// выделение памяти для массива классов
mp = new MyPoint[10];

// выделение памяти для каждого класса
for (int i=0; i<mp.length; i++)
    mp[i] = new MyPoint();

mp[0].SetXY(10, 20);
mp[1].SetXY(30, -100);
mp[2].SetXY(4, -345);

int d;
d = mp[2].GetY(); // d = -345
d = mp[0].GetX(); // d = 10
d = mp[1].GetY(); // d = -100

 

14. Пример описания одномерного массива интерфейсов.

Пусть задан класс с именем MyPoint. Класс реализует интерфейс MyInterface. Нужно описать объект-переменную, которая есть массивом из 5 элементов типа интерфейс MyInterface.

// объявление интерфейса MyInterface
interface MyInterface
{
    void SetXY(int xx, int yy);
}

// объявление класса MyPoint
class MyPoint implements MyInterface
{
    int x; // внутренняя переменная x
    int y; // внутренняя переменная y

    // реализация метода интерфейса
    public void SetXY(int xx, int yy)
    {
        x = xx;
        y = yy;
    }

    // методы класса
    public int GetX()
    { return x; }

    public int GetY()
    { return y; }
}

...

// объявление переменной типа массив классов MyPoint
MyPoint[] mp;

// выделение памяти для массива классов
mp = new MyPoint[3];

// выделение памяти для каждого класса
for (int i=0; i<mp.length; i++)
    mp[i] = new MyPoint();

mp[2].SetXY(4, -345); // заполнить значениями члены класса

int d = mp[2].GetY(); // d = -345

// описание переменной mi типа массив интерфейсов MyInterface
MyInterface[] mi;

// выделение памяти под массив ссылок на интерфейсы
mi = new MyInterface[5];

// выделение памяти под каждую переменную-интерфейс
for (int i=0; i<mi.length; i++)
    mi[i] = new MyPoint();

// использование переменной mi
mi[0] = mp[2];       // mi[0] ссылается на mp[2]
mi[0].SetXY(23, 35); // изменить mi[0] - означает изменить mp[2]
d = mp[2].GetY();   // d = 35

 

15. Пример описания и использования одномерного массива строк

В языке Java для работы со строками введен особый класс String. В данном примере продемонстрированы операции:

  • объявление массива строк и его инициализация;
  • копирование массива строк в другой массив;
  • использование метода clone() для копирования массивов строк.
// объявление и инициализация массива строк
String[] M1 =   {
                    "Text #1",
                    "Text #2",
                    "Text #3"
                };

// объявление массива M2
String[] M2;
M2 = new String[3];

// присвоить один массив другому
for (int i=0; i<3; i++)
    M2[i] = M1[i];

// присвоение массивов с использованием метода clone()
String[] M3;
M3 = M1.clone();

 


Связанные темы