Масиви в Java

Масиви в Java

В Java масивът е важна линейна структура от данни, която ни позволява да съхраняваме множество стойности от един и същи тип.

  • Масивите в Java са обекти, като всички други обекти в Java масивите имплицитно наследяват от класа java.lang.Object. Това ви позволява да извиквате методи, дефинирани в Object (като toString() equals() и hashCode()).
  • Масивите имат вградено свойство за дължина, което предоставя броя на елементите в масива
Java
   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      // initializing array      int  []     arr     =     {  40       55       63       17       22  };      // size of array      int     n     =     arr  .  length  ;      // traversing array      for     (  int     i     =     0  ;     i      <     n  ;     i  ++  )      System  .  out  .  print  (  arr  [  i  ]     +     ' '  );      }   }   

Изход
40 55 63 17 22  

Основни характеристики на масивите

  • Съхранявайте примитиви и обекти: Java масивите могат да съдържат както примитивни типове (като int char boolean и т.н.), така и обекти (като String Integer и т.н.)
  • Разпределение на непрекъсната памет Когато използваме масиви от примитивни типове, елементите се съхраняват в съседни местоположения. За непримитивни типове референциите на елементи се съхраняват в съседни местоположения.
  • Индексиране на база нула: Първият елемент от масива е с индекс 0.
  • Фиксирана дължина: След създаване на масив размерът му е фиксиран; не можем да го променим.
примитивен_масив_Примитивно представяне на масиви в Java елемент-масив-актуализацияПредставяне на непримитивни масиви в Java

Основни операции с масиви в Java

1. Деклариране на масив

Общата форма на декларация на масива е 

// Метод 1:
int arr [];

// Метод 2:
int[] arr;

Типът на елемента определя типа данни на всеки елемент, който съставлява масива. Подобно на масив от цели числа, можем също да създадем масив от други примитивни типове данни като char float double и т.н. или дефинирани от потребителя типове данни (обекти от клас).

Забележка: Това е просто начинът, по който можем да създадем променлива в масив, но реален масив не съществува. Той просто казва на компилатора, че тази променлива (int Array) ще съдържа масив от целочислен тип.

2. Инициализиране на масив в Java

Когато се декларира масив, се създава само препратка към масив. Използваме new, за да разпределим масив с даден размер.

int arr[] = нов int[размер];

  • Декларацията на масива обикновено е статична, но ако размерът не е дефиниран, масивът е с динамичен размер.
  • Паметта за масиви винаги се разпределя динамично (в сегмент на купчина) в Java. Това е различно от C/C++, където паметта може да бъде или статично разпределена, или динамично разпределена.
  • Елементите в масива, разпределени от new, автоматично ще бъдат инициализирани на нула (за числови типове), false (за булеви) или null (за референтни типове).

Литерал на масив в Java

В ситуация, в която размерът на масива и променливите на масива са вече известни, могат да се използват литерали на масива. 

// Деклариране на литерал на масив
int[] arr = нов int[]{ 12345678910 };

  • Дължината на този масив определя дължината на създадения масив.
  • Няма нужда да пишете новата част int[] в най-новите версии на Java.

3. Промяна на елемент от масив

За да промените елемент, присвоете нова стойност на определен индекс. Индексът започва с 0 и завършва на (общ размер на масива) -1.

траверс-масив

// Промяна на първия елемент на 90
arr[0] = 90;

4. Дължина на масива

Можем да получим дължината на масив, като използваме свойството length:

// Получаване на дължината на масива
int n = arr.length;

5. Достъп и актуализиране на всички елементи на масива

  • Всички елементи на масива могат да бъдат достъпни с помощта на Java for Loop.
  • Всеки елемент в масива е достъпен чрез неговия индекс.
ИзходДостъп и актуализиране на всички елементи на масива

Java програма, за да илюстрира създаването на масив от цели числа, поставя някои стойности в масива и отпечатва всяка стойност в стандартен изход

Java
   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      // declares an Array of integers.      int  []     arr  ;      // allocating memory for 5 integers.      arr     =     new     int  [  5  ]  ;      // initialize the elements of the array      // first to last(fifth) element      arr  [  0  ]     =     2  ;      arr  [  1  ]     =     4  ;      arr  [  2  ]     =     8  ;      arr  [  3  ]     =     12  ;      arr  [  4  ]     =     16  ;      // 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 : 2 Element at index 1 : 4 Element at index 2 : 8 Element at index 3 : 12 Element at index 4 : 16  

Масиви от обекти в Java

Създава се масив от обекти като масив от елементи с данни от примитивен тип

Пример : Тук вземаме студентски клас и създаваме масив от Student с пет обекта Student, съхранени в масива. Обектите Student трябва да бъдат създадени с помощта на конструктора на класа Student и техните препратки трябва да бъдат присвоени на елементите на масива.

Java
   class   Student     {      public     int     roll_no  ;      public     String     name  ;          Student  (  int     roll_no       String     name  ){      this  .  roll_no     =     roll_no  ;      this  .  name     =     name  ;      }   }   public     class   Geeks     {      public     static     void     main  (  String  []     args  ){          // declares an Array of Student      Student  []     arr  ;      // allocating memory for 5 objects of type Student.      arr     =     new     Student  [  5  ]  ;      // initialize the elements of the array      arr  [  0  ]     =     new     Student  (  1       'aman'  );      arr  [  1  ]     =     new     Student  (  2       'vaibhav'  );      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 }  

Какво се случва, ако се опитаме да получим достъп до елементи извън размера на масива?

JVM хвърля ArrayIndexOutOfBoundsException, за да покаже, че масивът е бил достъпен с незаконен индекс. Индексът е или отрицателен, или по-голям или равен на размера на масива.

Кодът по-долу показва какво се случва, ако се опитаме да получим достъп до елементи извън размера на масива:

Java
   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      int  []     arr     =     new     int  [  4  ]  ;      arr  [  0  ]     =     10  ;      arr  [  1  ]     =     20  ;      arr  [  2  ]     =     30  ;      arr  [  3  ]     =     40  ;      System  .  out  .  println  (      'Trying to access element outside the size of array'  );      System  .  out  .  println  (  arr  [  5  ]  );      }   }   

Изход:

Извеждане на елементи извън размера на масива

Предаване на масиви към методи

Подобно на променливите, можем също да предаваме масиви на методи. Например програмата по-долу предава масива на метода sum, за да изчисли сумата от стойностите на масива.

Пример:

Java
   public     class   Geeks     {      // 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  

Обяснение

  • Тази програма на Java демонстрира как да прехвърлите масив към метод.
  • В основния метод се декларира и инициализира масив от цели числа.
  • Методът sum() се извиква с arr като аргумент.
  • Вътре в метода sum() всички елементи на масива се добавят с помощта на for цикъл.
  • След това крайната сума се отпечатва на конзолата.

Връщане на масиви от методи

Както обикновено методът може да върне и масив. Например програмата по-долу връща масив от метод m1. 

Пример:

Java
   class   Geeks     {      // 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     };      }   }   

Изход
1 2 3  

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

  • Ефективен достъп: Достъпът до елемент чрез неговия индекс е бърз и има постоянна времева сложност O(1).
  • Управление на паметта: Масивите имат фиксиран размер, което прави управлението на паметта лесно и предвидимо.
  • Организация на данните: Масивите помагат за организирането на данните по структуриран начин, което улеснява управлението на свързани елементи.

Недостатъци на Java Arrays

  • Фиксиран размер: След като масивът бъде създаден, неговият размер не може да бъде променен, което може да доведе до загуба на памет, ако размерът е надценен, или недостатъчно място за съхранение, ако е подценен.
  • Типова хомогенност: Масивите могат да съхраняват само елементи от един и същи тип данни, което може да изисква допълнителна обработка за смесени типове данни.
  • Вмъкване и изтриване: Вмъкването или изтриването на елементи, особено в средата на масив, може да бъде скъпо, тъй като може да изисква преместване на елементи.

Свързани публикации

  • Назъбен масив в Java
  • Цикъл за всеки в Java
  • Клас масиви в Java