Массив — это структура данных, используемая для хранения набора переменных (элементов) одного типа. Элементы массива хранятся в непрерывной области памяти. Где к каждому элементу данных можно получить доступ по его порядковому номеру.

Массив в Java основан на индексах, первый элемент массива хранится в 0-м индексе, 2-й элемент хранится в 1-м индексе и так далее.

Зачем нам нужны массивы?

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

Объявление массивов

Чтобы объявить массив, определите тип переменной с помощью квадратных скобок.

Syntax:
          dataType[] arrayName;

Example:  
          int[] arr;
              OR               // String[] cars;
          int arr[];

Creating an array:
                
         int[] arr = new int[10];  // To define the array's capacity, use the keyword new

Доступ к элементам массива

Вы можете получить доступ к элементу массива, обратившись к номеру index.

String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
System.out.println(cars[0]);
// Output Volvo

Примечание. Индексы массива начинаются с 0: [0] — это первый элемент. [1] — второй элемент и т. д.

Изменить элемент массива

Чтобы изменить значение определенного элемента, обратитесь к номеру индекса:

String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
System.out.println(cars[0]);
// Now output is Opel instead of Volvo

Длина массива

Вы можете получить доступ к длине массива (количеству элементов, которые он хранит) через его свойство length. В C/C++ нам нужно использовать оператор sizeof.

Чтобы узнать, сколько элементов в массиве, используйте свойство length:

public class Program {
  public static void main(String[] args) {
     String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
        System.out.println(cars.length);
  }
}

// Output: 4
// Note: Array index starts from 0.

/* Method 1:
             int[] arr = new int[10];
             int arrayLength = arr.length;
             System.out.println("Array Length is: " + arrayLength);

   Method 2: 
             String[] city = {
      "Delhi",
      "Bhubaneswar",
      "Mumbai",
      "Bangalore",
      "Kolkata",
      "Hyderabad",
    };
    int arrayLength = city.length;
    System.out.println("The size of the array is: " + arrayLength); */

/* Output:

Method 1: 10
Method 2: 6     */

Цикл for чаще всего используется при работе с массивами, поскольку мы можем использовать длину массива, чтобы определить, сколько раз выполнять цикл.

Пример. Вычисление суммы всех элементов массива с помощью цикла for.

public class Pprogram {
  public static void main(String[] args) {
    int [] myArr = {6, 42, 3, 7};
    int sum = 0;
   for(int x=0; x<myArr.length; x++) {
     sum += myArr[x];
    }
    System.out.println(sum);
  }
}

// Output: 58

В приведенном выше коде мы объявили переменную с именем sum для хранения результата и присвоили ей значение 0. Затем мы использовали цикл for для перебора массива, добавляя значение каждого элемента к переменной.

Условие цикла for — x‹myArr.length, так как индекс последнего элемента — myArr.length-1.

Улучшенный цикл for

Усовершенствованный цикл for (цикл for each) используется для обхода элементов в массивах. Преимущества в том, что это исключает возможность ошибок и облегчает чтение кода.

public class Program {
  public static void main(String[] args) {
    int[] primes = {2, 3, 5, 7};

   for(int t: primes) {                 // Syntax: for(dataType item : array)
     System.out.println(t);
   }
  }
}

/* Output: 
2
3
5
7     */

Расширенный цикл for объявляет переменную типа, совместимого с элементами массива, к которым осуществляется доступ. Переменная будет доступна в блоке for, и ее значение будет таким же, как у текущего элемента массива.

Таким образом, на каждой итерации цикла переменная t будет равна соответствующему элементу массива.

Типы массивов в java.

Существует два типа массива.

  • Одномерный массив
  • Многомерный массив

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

Одномерный массив или одномерный массив можно визуализировать как одну строку или столбец элементов массива, которые представлены именем переменной и доступ к элементам которых осуществляется с помощью значений индекса. Одномерный массив в java должен иметь дело только с одним параметром.

Например, счет серии футбольных матчей может храниться в одномерном массиве.

Объявление одномерного массива

Общая форма:

data-type var-name[];
       OR 
data-type[] var-name;
       OR
data-type []var-name; 

Объявление массива состоит из двух компонентов:

  • тип данных: тип данных определяет тип данных каждого элемента, присутствующего в массиве, например char, int, float, объекты и т. д.
  • имя-переменной: это имя ссылочной переменной, которая указывает на объект массива, хранящийся в куче памяти.

[ ] называется индексом.

Построение одномерного массива в Java

В основном существует два способа создания массива в Java:

  1. Мы можем объявить и сохранить значения непосредственно во время объявления:
int marks[ ] = { 90, 97, 95, 99, 100 };

Здесь JVM (виртуальная машина Java, которая управляет кодом Java, преобразует байт-код Java в машинный язык) назначит пять непрерывных ячеек памяти для хранения значений, присвоенных массиву.

2. Второй способ создания массива — сначала объявить массив, а затем выделить память с помощью ключевого слова new:

var-name = new type[size];     // int[] Number = new int[10];

Здесь size определяет максимальное количество элементов, которые могут храниться в массиве. Чтобы выделить память с помощью new, мы должны указать тип и количество элементов в массиве. JVM выделила места в памяти для хранения 10 целых чисел, но мы еще не сохранили фактические элементы в массиве. Итак, далее мы рассмотрим, как элементы сохраняются в памяти.

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

new int[10] инициализирует и создает объект, на который ссылается число, и выделяет память объекту в сегменте кучи.

Инициализация одномерного массива

public class AssignValues {

  public static void main(String args[]) {
    int number[]; // array declared
    number = new int[10]; // allocating memory, initialization
    number[0] = 11;
    number[1] = 22;
    number[2] = 33;
    number[3] = 44;
    number[4] = 55;
    number[5] = 66;
    number[6] = 77;
    number[7] = 88;
    number[8] = 99;
    number[9] = 100;
  }
}

Примечание.

  • Поскольку мы выбрали тип данных int, мы можем добавлять в массив только целочисленные значения. Итак, тип переменной зависит от типа данных массива.
  • Размер массива зависит от того, сколько значений мы предоставляем во время инициализации.
  • Размер одномерных массивов нельзя изменить после их создания.

Общий синтаксис: одномерный массив

data_type[] var_name = new data_type[];
                 OR
data_type var_name[] = {}; // curly braces encloses specialized set of values

Например:

public class Example {

  public static void main(String args[]) {
    int arr[] = { 1, 5, 10, 15, 20 }; // initializing array
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i] + " "); // printing array elements
    }
  }
}


// Output : 1  5  10  15  20

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

Многомерные массивы организованы как массив массивов. Вы можете рассматривать его как один контейнер, в котором хранится несколько контейнеров. Каждый элемент многомерного массива сам является массивом.

Представление элементов в строках и столбцах. Таким образом, вы можете получить общее количество элементов в многомерном массиве, умножив размер строки на размер столбца. Итак, если у вас есть двумерный массив 3×4, то общее количество элементов в этом массиве = 3×4 = 12.

Например,

int[][] a = new int[3][4];

Здесь мы создали многомерный массив с именем a. Это двумерный массив, который может содержать не более 12 элементов,

Примеры:

Two dimensional array:
int[][] twoD_arr = new int[10][20];
// (or) int a[][] = new int[3][3];

Three dimensional array:
int[][][] threeD_arr = new int[10][20][30];
// (or) int a[][][] = new int[3][3][3];

Двумерный массив

2D-массив можно определить как массив массивов. Двумерный массив организован как матрицы, которые можно представить как набор строк и столбцов.

Объявление и инициализация двумерного массива

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

int a[][]= new int[][] {{1,2,3}, {4,5,6}, {7,8,9}};
                 (or)
int a[][]= {{15,27,36}, {41,52,64}, {79,87,93}};
                 (or)
int a[][]= new int[3][3];

Например :

В Java существуют различные методы для двумерных массивов.

  • Использование стандартного метода
  • Использование цикла For
  • Использование сканера
  • Использование строки

Стандартный метод

class TwodimensionalStandard
  {
     public static void main(String args[])
       {    
      int[][] a={{10,20},{30,40}};//declaration and initialization   
         System.out.println("Two dimensional array elements are");    
         System.out.println(a[0][0]);    
         System.out.println(a[0][1]);    
         System.out.println(a[1][0]);    
         System.out.println(a[1][1]);     
       }
}

/* Output: 

Two dimensional array elements are
10
20
30
40    */

Метод цикла For

class TwodimensionalLoop
   {
      public static void main(String args[])
        {    
          int[][] a={{10,20},{30,40},{50,60}};//declaration and initialization   
             System.out.println("Two dimensional array elements are");    
               for (int i = 0; i < 3; i++) 
                 {
                    for (int j = 0; j < 2; j++) 
                       {
                         System.out.println(a[i][j]);
                        }
                   }
           }
     }

/* Output: 

Two dimensional array elements are
10
20
30
40
50
60        */

Метод сканирования

import java.util.*;
class TwoDimensionalScanner
{
   public static void main(String args[])
   {    
 
 Scanner sc=new Scanner(System.in);
 System.out.println("Enter Row length of an array : ");
 int row=sc.nextInt();
 System.out.println("Enter column length of an array : ");
 int column=sc.nextInt();
 int a[][]=new int[row][column];//declaration      
 System.out.print("Enter " + row*column + " Elements to Store in Array :\n");
        for (int i = 0; i < row; i++)
 {
     for(int j = 0; j < column; j++)
     {
            a[i][j] = sc.nextInt();
     }
 }   
        System.out.print("Elements in Array are :\n");
        for (int i = 0; i < row; i++)
 {
     for(int j = 0; j < column; j++)
     {
        System.out.println("Row ["+i+"]:  Column ["+j+"] :"+a[i][j]);
      }
 }  
   }
}


/* Output:
Enter Row length of an array :
2
Enter column length of an array :
3
Enter 6 Elements to Store in Array :
1
2
3
4
5
6
Elements in Array are :
Row [0]:  Column [0] :1
Row [0]:  Column [1] :2
Row [0]:  Column [2] :3
Row [1]:  Column [0] :4
Row [1]:  Column [1] :5
Row [1]:  Column [2] :6       */

Строковый метод

class TwoDimensionalString
  {
    public static void main(String[] args)
       {
        String[][] str = new String[][]{{"one", "two"}, {"three", "four"},{"five","six"}};
        System.out.println("Two dimensional string array elements are :\n");    
            for (int i = 0; i < 3; i++) 
             {
               for (int j = 0; j < 2; j++) 
                 {
                   System.out.println("str["+i+"]["+j+"]:"+str[i][j]);
                 }
             }        
        }
   }

/* Output:

Two dimensional string array elements are :
 
str[0][0]:one
str[0][1]:two
str[1][0]:three
str[1][1]:four
str[2][0]:five
str[2][1]:six            */

class MultidimensionalArray {
    public static void main(String[] args) {

        // create a 2d array
        int[][] a = {
            {1, 2, 3}, 
            {4, 5, 6, 9}, 
            {7}, 
        };
      
        // calculate the length of each row
        System.out.println("Length of row 1: " + a[0].length);
        System.out.println("Length of row 2: " + a[1].length);
        System.out.println("Length of row 3: " + a[2].length);
    }
}

// Here, we are using the length attribute to calculate the length of each row.

/* Output:
Length of row 1: 3
Length of row 2: 4
Length of row 3: 1     */

Трехмерный массив

Массив с тремя индексами (индексами) называется трехмерным массивом в Java.

Другими словами, трехмерный массив — это набор одного или нескольких двумерных массивов, все из которых имеют общее имя.

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

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

Electronics department:

student1 scores: 75, 87, 69
student2 scores: 90, 87, 85
student3 scores: 56, 67, 76

Computer Science department:

student1 scores: 78, 67, 75
student2 scores: 87, 98, 76
student3 scores: 67, 56, 65

Information Technology department:

student1 scores: 72, 63, 72
student2 scores: 82, 91, 71
student3 scores: 64, 56, 66

The syntax below declares a three-dimensional array of variable scores, creates an array, and assigns its reference to scores:

// int[ ][ ][ ] scores = new int[3][3][3];

We can also use the shorthand notation to create and initialize the array as follows:

 int[ ][ ][ ] scores = {
                                   {{75, 87, 69}, {90, 87, 85},{56, 67, 76}},
                                   {{78, 67, 75}, {87, 98, 76}, {67, 56, 66}},
                                   {{72, 63, 72}, {82, 91, 71}, {64, 56, 66}}
                               };  

Ключевые моменты:

а) многомерный массив в java на самом деле является массивом, в котором каждый элемент представляет другой массив.

б) Разница между трехмерным массивом и двумерным массивом заключается в том, что трехмерный массив состоит из массива двумерных массивов, тогда как двумерный массив состоит из массива одномерных массивов.

c) Три цикла for (вложенный цикл) используются для доступа к каждому элементу в таблицах.

г) Первый цикл for используется для выбора каждой таблицы.

e) Второй цикл for используется для выбора каждой строки выбранной таблицы.

f) Третий цикл for используется для доступа к каждому элементу (значению) в выбранной строке и таблице.

Трехмерный (3D-массив) пример

Создайте трехмерный массив, состоящий из оценок учащихся по отделам. Есть три отдела: электроники, CS и IT.

На каждом отделении 3 студента, и каждый студент имеет баллы по 3 предметам. Мы посчитаем общие полученные оценки и их процент для каждого ученика.

public class ThreeDArray {
public static void main(String[] args) 
{
 String[ ] department = {"Electronics", "CS", "IT"};
 int dept, st, sc, total = 0;
 double perc = 0;

// Take the scores of students in a 3D array.
    int[ ][ ][ ] scores = {
                      {{75, 87, 69}, {90, 87, 85},{56, 67, 76}}, 
                      {{78, 67, 75}, {87, 98, 76}, {67, 56, 66}}, 
                      {{72, 63, 72}, {82, 91, 71}, {64, 56, 66}}
                     };
// Display the scores of students from 3D array.
   for(dept = 0; dept < 3; dept++)
   { 
 for(int i = 0; i < 3; i++)
 {
  System.out.println("Department " +department[i]+ ": "); 
  for(st = 0; st < 3; st++)
  {
    System.out.println("Student" +(st + 1)+ " scores: ");  
    for(sc = 0; sc < 3; sc++)
    {
   System.out.print(scores[dept][st][sc]+ " ");
   total += scores[dept][st][sc];
   perc = (double)total/3;
    }
    System.out.println("\nTotal scores: " +total); // Displaying total marks of student.
    System.out.println("Percentage: " +perc); // Displaying percentage. 
    total = 0; // reset total to zero.
  }
  System.out.println();
  }
 break;
 }
   }
}


/* Output:
Department Electronics: 
           Student1 scores: 75 87 69 
           Total scores: 231
           Percentage: 77.0
           
           Student2 scores: 90 87 85 
           Total scores: 262
           Percentage: 87.33333333333333

           Student3 scores: 56 67 76 
           Total scores: 199
           Percentage: 66.33333333333333

Department CS: 
           Student1 scores: 75 87 69 
           Total scores: 231
           Percentage: 77.0
       
           Student2 scores: 90 87 85 
           Total scores: 262
           Percentage: 87.33333333333333
 
           Student3 scores: 56 67 76 
           Total scores: 199
           Percentage: 66.33333333333333

Department IT: 
           Student1 scores: 75 87 69 
           Total scores: 231
           Percentage: 77.0

           Student2 scores: 90 87 85 
           Total scores: 262
           Percentage: 87.33333333333333

           Student3 scores: 56 67 76 
           Total scores: 199
           Percentage: 66.33333333333333              */

Массив строк

Массив строк — это массив фиксированного числа строковых значений. Строка — это последовательность символов. Как правило, строка является неизменяемым объектом, что означает, что значение строки не может быть изменено. Строковый массив работает аналогично другим типам данных массивов.

Ключевые моменты о массиве строк:

  • Это объект массива.
  • Его можно объявить двумя способами; с указанием размера или без указания размера.
  • Его можно инициализировать либо во время объявления, либо путем заполнения значений после объявления.
  • Элементы могут быть добавлены в массив строк после его объявления.
  • Массив строк можно повторять с помощью цикла for.
  • Операция поиска и сортировки может выполняться в массиве строк.

Декларация:

Строковый массив может быть объявлен следующим образом:

String[] stringArray1   //Declaration of the String Array without specifying the size  
String[] stringArray2 = new String[2];   //Declarartion by specifying the size  

Инициализация:

String[] strAr1=new String[] {"Ani", "Sam", "Joe"}; //inline initialization  
2. String[] strAr2 = {"Ani", "Sam", " Joe"};  
3. String[] strAr3= new String[3]; //Initialization after declaration with specific size  
   strAr3[0]= "Ani";  
   strAr3[1]= "Sam";  
   strAr3[2]= "Joe";  

Добавление элементов в массив строк

Мы можем легко добавлять элементы в массив строк, как и другие типы данных. Это можно сделать с помощью следующих трех методов:

  • Использование предварительного выделения массива
  • Использование списка массивов
  • Создав новый массив
  1. Предварительное выделение массива

В этом методе у нас уже есть массив большего размера.

Например, если нам нужно сохранить 10 элементов, мы создадим массив размером 20. Это самый простой способ расширить элементы массива.

// Java Program to add elements in a pre-allocated Array 
 
import java.util.Arrays;  
public class StringArrayDemo {  
        public static void main(String[] args) {  
            String[] sa = new String[7]; // Creating a new Array of Size 7  
            sa[0] = "A"; // Adding Array elements  
            sa[1] = "B";  
            sa[2] = "C";  
            sa[3] = "D";  
            sa[4] = "E";  
            System.out.println("Original Array Elements:" + Arrays.toString(sa));  
            int numberOfItems = 5;  
            String newItem = "F"; // Expanding Array Elements Later  
            String newItem2 ="G";  
            sa[numberOfItems++] = newItem;  
            sa[numberOfItems++] = newItem2;  
            System.out.println("Array after adding two elements:" +    
                      Arrays.toString(sa));  
        }  
    }  

/* Output:
           Original Array Elements:[A, B, C, D, E, null, null]
           Array after adding two elements:[A, B, C, D, E, F, G]     */

В этом примере мы добавили два элемента в предварительно выделенный массив.

2.Список массивов

Список массивов — это структура данных в структуре коллекций Java. Мы можем легко добавлять элементы в массив строк, используя список массивов в качестве промежуточной структуры данных. Класс Java ArrayList использует динамический массив для хранения элементов. Это похоже на массив, но без ограничений по размеру. Мы можем добавлять или удалять элементы в любое время. Он находится в пакете java.util. Это как вектор в C++.

import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.List;  
  
public class StringArrayDemo1 {   
        public static void main(String[] args)   
        {   
              // Defining a String Array   
              String sa[] = { "A", "B", "C", "D", "E", "F" };  
          //   
            System.out.println("Initial Array:\n"  
                                  + Arrays.toString(sa));   
            String ne = "G"; // Define new element to add  
            List<String>l = new ArrayList<String>(  
                      Arrays.asList(sa)); // Convert Array to ArrayList  
            l.add(ne); // Add new element in ArrayList l  
            sa = l.toArray(sa); // Revert Conversion from ArrayList to Array  
            // printing the new Array  
            System.out.println("Array with added Value: \n"  
                               + Arrays.toString(sa)) ;   
        }   
    }  


/* Output:

Initial Array:
[A, B, C, D, E, F]
Array with added value: 
[A, B, C, D, E, F, G]      */

3. Создание нового массива

В этом методе мы создадим новый массив большего размера, чем исходный массив, и разместим в нем элементы. Мы скопируем все элементы во вновь добавленный массив.

// Java Program to add elements in a String Array by creating a new Array  

import java.util.Arrays;  

public class StringArrayDemo2 {  
      public static void main(String[] args) {  
            //Declaring Initial Array  
            String[] sa = {"A", "B", "C" };    
            // Printing the Original Array  
            System.out.println("Initial Array: " + Arrays.toString(sa));  
                int length_Var = sa.length; //Defining the array length variable  
            String newElement = "D"; // Defining new element to add  
            //define new array with extended length           
            String[] newArray = new String[ length_Var + 1 ];  
            //Adding all the elements to initial Array  
            for (int i=0; i <sa.length; i++)  
            {  
                newArray[i] = sa [i];  
             }  
            //Specifying the position of the added elements ( Last)  
            newArray[newArray.length- 1] = newElement;  
            //make it original and print  
            sa = newArray;     
            System.out.println("updated Array: " + Arrays.toString(sa));  
        }  
    }  


/* Output:

Initial Array: [A, B, C]
updated Array: [A, B, C, D]   */

Анонимный массив

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

Свойства анонимных массивов:

  • Мы можем создать массив без имени. Такие типы безымянных массивов называются анонимными массивами.
  • Основная цель анонимного массива - просто мгновенное использование (только для одноразового использования).
  • Анонимный массив передается в качестве аргумента метода.

Примечание. При создании анонимного массива не указывайте размер в []. Количество значений, проходящих внутри {}, станет размером.

Синтаксис:

new <data type>[]{<list of values with comma separator>};

Примеры:

// anonymous int array 
new int[] { 1, 2, 3, 4};  

// anonymous char array 
new char[] {'x', 'y', 'z'}; 

// anonymous String array
new String[] {"Geeks", "for", "Geeks"}; 

// anonymous multidimensional array
new int[][] { {10, 20}, {30, 40, 50} };

Реализация:

// Java program to illustrate the concept of anonymous array

 
class Test {
    public static void main(String[] args)
    {
          // anonymous array
          sum(new int[]{ 1, 2, 3 });
    }
   
    public static void sum(int[] a)
    {
        int total = 0;
 
        // using for-each loop
        for (int i : a)
            total = total + i;
         
        System.out.println("The sum is: " + total);
    }
}


/* Output:

The sum is: 6    */

В приведенном выше примере просто для вызова метода суммы нам потребовался массив, но после реализации метода суммы мы больше не используем массив. Следовательно, для этого одноразового требования анонимный массив является лучшим выбором.