logo

Masyvai Java

Java masyvas yra svarbi linijinė duomenų struktūra, leidžianti saugoti kelias to paties tipo reikšmes.

  • „Java“ masyvai yra objektai, kaip ir visi kiti „Java“ masyvo objektai, netiesiogiai paveldimi iš java.lang.Object klasės. Tai leidžia iškviesti objekte apibrėžtus metodus (pvz., toString() equals() ir hashCode()).
  • Masyvai turi įmontuotą ilgio savybę, kuri nurodo masyvo elementų skaičių
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] + ' ');  } } 

Išvestis
40 55 63 17 22 

Pagrindinės masyvo savybės

  • Laikykite primityvus ir objektus: „Java“ masyvai gali turėti tiek primityvius tipus (pvz., int char boolean ir kt.), tiek objektus (pvz., String Integer ir kt.)
  • Gretimos atminties paskirstymas Kai naudojame primityvių tipų masyvus, elementai saugomi gretimose vietose. Neprimityviųjų tipų elementų nuorodos saugomos gretimose vietose.
  • Nulinis indeksavimas: Pirmasis masyvo elementas yra indekse 0.
  • Fiksuotas ilgis: Sukūrus masyvą, jo dydis fiksuojamas; mes negalime to pakeisti.
primityvus_masyvas_' title=Primityviojo masyvo vaizdavimas Java atnaujinimo-masyvo-elementas' loading='lazy' title=Neprimityviojo masyvo atvaizdavimas Java

„Java“ masyvų veikimo pagrindai

1. Masyvo deklaravimas

Bendroji masyvo deklaracijos forma yra 

// 1 būdas:
int arr[];



// 2 metodas:
int[] arr;

Elemento tipas nustato kiekvieno elemento, kurį sudaro masyvas, duomenų tipą. Kaip ir sveikųjų skaičių masyvas, taip pat galime sukurti kitų primityvių duomenų tipų masyvą, pvz., char float double ir tt arba vartotojo apibrėžtus duomenų tipus (klasės objektus).

Pastaba: Kaip tik galime sukurti masyvo kintamąjį, tikrojo masyvo nėra. Tai tik nurodo kompiliatoriui, kad šis kintamasis (int Array) turės sveikojo skaičiaus masyvą.

2. Masyvo inicijavimas Java

Kai masyvas deklaruojamas, sukuriama tik masyvo nuoroda. Naudojame naują, kad paskirstytume nurodyto dydžio masyvą.

int arr[] = naujas int[dydis];

  • Masyvo deklaracija paprastai yra statinė, bet jei dydis neapibrėžtas, masyvo dydis yra dinamiškas.
  • Masyvų atmintis visada dinamiškai paskirstoma (krūvos segmente) Java. Tai skiriasi nuo C/C++, kur atmintis gali būti paskirstyta statiškai arba dinamiškai.
  • Elementai masyve, priskirti nauju, bus automatiškai inicijuojami į nulį (skaitiniams tipams), false (loginiams) arba nuliniams (nuorodos tipams).

„Array Literal“ Java kalba

Esant situacijai, kai masyvo dydis ir masyvo kintamieji jau žinomi, galima naudoti masyvo literalius. 

// Masyvo paskelbimas pažodžiui
int[] arr = naujas int[]{ 12345678910 };

mylivericket
  • Šio masyvo ilgis lemia sukurto masyvo ilgį.
  • Nereikia rašyti naujos int[] dalies naujausiose Java versijose.

3. Pakeiskite masyvo elementą

Norėdami pakeisti elementą, konkrečiam indeksui priskirkite naują reikšmę. Indeksas prasideda 0 ir baigiasi (bendras masyvo dydis) -1.

traversas-masyvas' loading='lazy' title=

// Pirmojo elemento keitimas į 90
arr[0] = 90;

4. Masyvo ilgis

Masyvo ilgį galime gauti naudodami ilgio savybę:

// Masyvo ilgio gavimas
int n = arr.ilgis;

5. Visų masyvo elementų prieiga ir atnaujinimas

  • Visus masyvo elementus galima pasiekti naudojant „Java for Loop“.
  • Kiekvienas masyvo elementas pasiekiamas per jo indeksą.
Išvestis' loading='lazy' title=Prieiga prie visų masyvo elementų ir jų atnaujinimas

Java programa, skirta iliustruoti sveikųjų skaičių masyvo kūrimą, į masyvą įdeda tam tikras reikšmes ir kiekvieną reikšmę išspausdina standartinėje išvestyje

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]);  } } 

Išvestis
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 

Objektų masyvai Java

Objektų masyvas sukuriamas kaip primityvaus tipo duomenų elementų masyvas

Pavyzdys : Mes pradedame mokinio klasę ir sukuriame Mokinio masyvą su penkiais masyve saugomais Mokinio objektais. Studentų objektai turi būti pavaizduoti naudojant Studento klasės konstruktorių, o jų nuorodos turi būti priskirtos masyvo elementams.

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+' }');  } } 

Išvestis
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 } 

Kas atsitiks, jei bandysime pasiekti elementus, kurie nėra masyvo dydžio?

JVM meta ArrayIndexOutOfBoundsException, kad parodytų, kad masyvas buvo pasiektas naudojant neteisėtą indeksą. Indeksas yra neigiamas arba didesnis arba lygus masyvo dydžiui.

Žemiau esantis kodas rodo, kas atsitiks, jei bandysime pasiekti elementus, kurie nėra masyvo dydžio:

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]);  } } 

Išvestis:

' loading='lazy' title=Elementų, esančių už masyvo dydžio, išvestis

Masyvų perdavimas metodams

Kaip ir kintamuosius, mes taip pat galime perduoti masyvus metodams. Pavyzdžiui, toliau pateikta programa perduoda masyvą metodo sumai, kad apskaičiuotų masyvo reikšmių sumą.

Pavyzdys:

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);  } } 

Išvestis
sum of array values : 15 

Paaiškinimas

  • Ši Java programa parodo, kaip perduoti masyvą metodui.
  • Sveikųjų skaičių masyvas arr deklaruojamas ir inicijuojamas pagrindiniu metodu.
  • Sum() metodas iškviečiamas su arr kaip argumentu.
  • Sum() metodo viduje visi masyvo elementai pridedami naudojant for kilpą.
  • Tada galutinė suma atspausdinama į konsolę.

Masyvų grąžinimas iš metodų

Kaip įprasta, metodas taip pat gali grąžinti masyvą. Pavyzdžiui, toliau pateikta programa grąžina masyvą iš metodo m1. 

Pavyzdys:

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 };  } } 

Išvestis
1 2 3 

Java masyvų pranašumai

  • Efektyvi prieiga: Prieiga prie elemento pagal jo indeksą yra greita ir turi pastovų laiko sudėtingumą O(1).
  • Atminties valdymas: Masyvai yra fiksuoto dydžio, todėl atminties valdymas yra paprastas ir nuspėjamas.
  • Duomenų organizavimas: Masyvai padeda sistemingai tvarkyti duomenis, todėl lengviau valdyti susijusius elementus.

Java masyvų trūkumai

  • Fiksuotas dydis: Sukūrus masyvą, jo dydis negali būti pakeistas, o tai gali sukelti atminties švaistymą, jei dydis yra pervertintas, arba nepakanka saugyklos, jei jis neįvertinamas.
  • Tipo homogeniškumas: Masyvai gali saugoti tik to paties tipo duomenų elementus, dėl kurių gali prireikti papildomo tvarkymo mišrių tipų duomenims.
  • Įterpimas ir ištrynimas: Elementų įterpimas arba ištrynimas, ypač masyvo viduryje, gali būti brangus, nes gali prireikti perkelti elementus.

Susiję įrašai

  • Jagged Array Java
  • Kiekvienai „Java“ kilpai
  • Masyvų klasė Java