Перейти к контенту

Массивы в Java — определение и создание, инициализация и заполнение

Массив — это структура данных, которая предназначена для хранения однотипных данных. Массивы в Java работают иначе, чем в C/C++. Особенности:

  • Поскольку массивы являются объектами, мы можем найти их длину. Это отличается от C/C++, где мы находим длину с помощью sizeof.
  • Переменная массива может также быть объявлена как другие переменные.
  • Переменные упорядочены и имеют индекс, начинающийся с 0.
  • Может также использоваться как статическое поле, локальная переменная или параметр метода.
  • Размер массива должен быть задан значением int, а не long или short.
  • Прямым суперклассом типа массива является Object.
  • Каждый тип массива реализует интерфейсы Cloneable and java.io.Serializable.

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

 

массивы java определение

Инициализация и доступ к массиву

Одномерные Массивы: общая форма объявления

[java]type var-name[];
или
type[] var-name;[/java]

Объявление состоит из двух компонентов: типа и имени. type объявляет тип элемента массива. Тип элемента определяет тип данных каждого элемента.

Кроме типа int, мы также можем создать массив других типов данных, таких как char, float, double или определяемый пользователем тип данных (объекты класса).Таким образом, тип элемента определяет, какой тип данных будет храниться в массиве. Например:

// both are valid declarations
int intArray[]; 
or int[] intArray; 

byte byteArray[];
short shortsArray[];
boolean booleanArray[];
long longArray[];
float floatArray[];
double doubleArray[];
char charArray[];

// an array of references to objects of
// the class MyClass (a class created by
// user)
MyClass myClassArray[]; 

Object[]  ao,        // array of Object
Collection[] ca;  // array of Collection
                     // of unknown type

Хотя приведенное выше первое объявление устанавливает тот факт, что intArray является переменной массива, массив фактически не существует. Он просто говорит компилятору, что эта переменная типа integer.

Чтобы связать массив int с фактическим физическим массивом целых чисел, необходимо обозначить его с помощью new и назначить int.

Как создать массив в Java

При объявлении массива создается только ссылка на массив. Чтобы фактически создать или предоставить память массиву, надо создать массив следующим образом: общая форма new применительно к одномерным и выглядит следующим образом:
var-name = new type [size];

Здесь type указывает тип данных, size — количество элементов в массиве, а var-name-имя переменной массива.

Пример:

int intArray[];    //объявление
intArray = new int[20];  // выделение памяти 

или

int[] intArray = new int[20]; // объединение

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

Литералы массива

В ситуации, когда размер массива и переменные уже известны, можно использовать литералы.

int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 }; 
 // Declaring array literal
  • Длина этого массива определяет длину созданного массива.
  • Нет необходимости писать int[] в последних версиях Java

Доступ к элементам массива Java с помощью цикла for

Доступ к каждому элементу массива осуществляется через его индекс. Индекс начинается с 0 и заканчивается на (общий размер)-1. Все элементы могут быть доступны с помощью цикла for.

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
  System.out.println("Element at index " + i + 
                                " : "+ arr[i]);

// Пример для иллюстрации создания array
// целых чисел, помещает некоторые значения в массив,
// и выводит каждое значение.

class GFG
{
public static void main (String[] args)
{
// declares an Array of integers.
int[] arr;

// allocating memory for 5 integers.
arr = new int[5];

// initialize the first elements of the array
arr[0] = 10;

// initialize the second elements of the array
arr[1] = 20;

//so on…
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
System.out.println(«Element at index » + i +
» : «+ arr[i]);
}
}
В итоге получаем:

Element at index 0 : 10
Element at index 1 : 20
Element at index 2 : 30
Element at index 3 : 40
Element at index 4 : 50

Массивы объектов

Массив объектов создается так же, как элементов данных следующим образом:

 Student[] arr = new Student[7];

StudentArray содержит семь элементов памяти каждый из класса student, в котором адреса семи объектов Student могут быть сохранены. Student объекты должны быть созданы с помощью конструктора класса student и их ссылки должны быть присвоены элементам массива следующим образом:

Student arr = new Student[5];

// Java program to illustrate creating an array of
// objects

class Student
{
public int roll_no;
public String name;
Student(int roll_no, String name)
{
this.roll_no = roll_no;
this.name = name;
}
}

// Elements of array are objects of a class Student.
public class GFG
{
public static void main (String[] args)
{
// declares an Array of integers.
Student[] arr;

// allocating memory for 5 objects of type Student.
arr = new Student[5];

// initialize the first elements of the array
arr[0] = new Student(1,»aman»);

// initialize the second elements of the array
arr[1] = new Student(2,»vaibhav»);

// so on…
arr[2] = new Student(3,»shikar»);
arr[3] = new Student(4,»dharmesh»);
arr[4] = new Student(5,»mohit»);

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
System.out.println(«Element at » + i + » : » +
arr[i].roll_no +» «+ arr[i].name);
}
}

Получаем:

Element at 0 : 1 aman
Element at 1 : 2 vaibhav
Element at 2 : 3 shikar
Element at 3 : 4 dharmesh
Element at 4 : 5 mohit

Что произойдет, если мы попытаемся получить доступ к элементу за пределами массива?
Компилятор создает исключение ArrayIndexOutOfBoundsException, указывающее, что к массиву был получен доступ с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива.

Многомерные

Многомерные массивы — это массивы массивов, каждый элемент которых содержит ссылку на другой массив. Создается путем добавления одного набора квадратных скобок ([]) для каждого измерения. Рассмотрим пример:

int[][] intArray = new int[10][20]; //a 2D array or matrix
int[][][] intArray = new int[10][20][10]; //a 3D array


class multiDimensional
{
public static void main(String args[])
{
// declaring and initializing 2D array
int arr[][] = { {2,7,9},{3,6,1},{7,4,2} };

// printing 2D array
for (int i=0; i< 3 ; i++)
{
for (int j=0; j < 3 ; j++)
System.out.print(arr[i][j] + » «);

System.out.println();
}
}
}

Output:
2 7 9
3 6 1
7 4 2

многомерный массив java

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

Как и переменные, мы можем передавать массивы в методы.

// Java program to demonstrate
// passing of array to method

class Test
{
// Driver method
public static void main(String args[])
{
int arr[] = {3, 1, 2, 5, 4};

// passing array to method m1
sum(arr);

}

public static void sum(int[] arr)
{
// getting sum of array values
int sum = 0;

for (int i = 0; i < arr.length; i++)
sum+=arr[i];

System.out.println("sum of array values : " + sum);
}
}

На выходе получим:

sum of array values : 15

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

Как обычно, метод также может возвращать массив. Например, ниже программа возвращает массив из метода m1.

// Java program to demonstrate
// return of array from method

class Test
{
// Driver method
public static void main(String args[])
{
int arr[] = m1();

for (int i = 0; i < arr.length; i++)
System.out.print(arr[i]+" ");

}

public static int[] m1()
{
// returning array
return new int[]{1,2,3};
}
}

Output:

1 2 3

Объекты класса

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

// Java program to demonstrate
// Class Objects for Arrays

class Test
{
public static void main(String args[])
{
int intArray[] = new int[3];
byte byteArray[] = new byte[3];
short shortsArray[] = new short[3];

// array of Strings
String[] strArray = new String[3];

System.out.println(intArray.getClass());
System.out.println(intArray.getClass().getSuperclass());
System.out.println(byteArray.getClass());
System.out.println(shortsArray.getClass());
System.out.println(strArray.getClass());
}
}

Output:

class [I
class java.lang.Object
class [B
class [S
class [Ljava.lang.String;

Теперь, как вы знаете, что массивы являются объектом класса. Членами массива являются следующие элементы:

  • Конечная длина открытого поля, содержащего количество компонентов. Длина может быть положительной или нулевой.
  • Все члены наследуются от класса Object; единственный метод объекта, который не наследуется, является метод clone.
  • Открытый метод clone () переопределяет метод clone в объекте класса.

Клонирование массивов

При клонировании одномерного массива, например Object[], выполняется копия с новым массивом, содержащим копии элементов исходного, а не ссылки.

// Java program to demonstrate
// cloning of one-dimensional arrays

class Test
{
public static void main(String args[])
{
int intArray[] = {1,2,3};

int cloneArray[] = intArray.clone();

// will print false as deep copy is created
// for one-dimensional array
System.out.println(intArray == cloneArray);

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

Output:

false
1 2 3

клонирование массивов

Клон многомерного массива (например, Object [] []) является копией и это означает, что он создает только один новый массив с каждым элементом и ссылкой на исходный массив элементов, но вложенные массивы являются общими.

// Java program to demonstrate
// cloning of multi-dimensional arrays

class Test
{
public static void main(String args[])
{
int intArray[][] = {{1,2,3},{4,5}};

int cloneArray[][] = intArray.clone();

// will print false
System.out.println(intArray == cloneArray);

// will print true as shallow copy is created
// i.e. sub-arrays are shared
System.out.println(intArray[0] == cloneArray[0]);
System.out.println(intArray[1] == cloneArray[1]);

}
}

Output:

false
true
true

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Пока нет комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован.

СайдбарКомментарии (0)