Tablice w Javie

Tablice w Javie

W Javie tablica jest ważną liniową strukturą danych, która pozwala nam przechowywać wiele wartości tego samego typu.

  • Tablice w Javie to obiekty, podobnie jak wszystkie inne obiekty w tablicach Javy, które w sposób dorozumiany dziedziczą z klasy java.lang.Object. Umożliwia to wywoływanie metod zdefiniowanych w obiekcie (takich jak toString() równa się() i hashCode()).
  • Tablice mają wbudowaną właściwość długości, która określa liczbę elementów tablicy
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  ]     +     ' '  );      }   }   

Wyjście
40 55 63 17 22  

Kluczowe cechy tablic

  • Przechowuj prymitywy i obiekty: Tablice Java mogą przechowywać zarówno typy pierwotne (takie jak int char boolean itp.), jak i obiekty (takie jak String Integer itp.)
  • Ciągła alokacja pamięci Kiedy używamy tablic typów pierwotnych, elementy są przechowywane w sąsiadujących lokalizacjach. W przypadku typów innych niż pierwotne odniesienia do elementów są przechowywane w sąsiadujących lokalizacjach.
  • Indeksowanie od zera: Pierwszy element tablicy ma indeks 0.
  • Stała długość: Po utworzeniu tablicy jej rozmiar jest stały; nie możemy tego zmienić.
prymitywna_tablica_Reprezentacja prymitywnej tablicy w Javie element-tablicy aktualizacjiReprezentacja tablicy nieprymitywnej w Javie

Podstawy operacji na tablicach w Javie

1. Deklarowanie tablicy

Ogólna forma deklaracji tablicy to 

// Metoda 1:
int tablica [];

// Metoda 2:
int[] tablica;

Typ elementu określa typ danych każdego elementu tworzącego tablicę. Podobnie jak tablica liczb całkowitych, możemy również utworzyć tablicę innych prymitywnych typów danych, takich jak char float double itp. lub typy danych zdefiniowane przez użytkownika (obiekty klasy).

Notatka: W ten sposób możemy utworzyć zmienną tablicową, która w rzeczywistości nie istnieje. Mówi jedynie kompilatorowi, że ta zmienna (int Array) będzie przechowywać tablicę typu całkowitego.

2. Inicjalizacja tablicy w Javie

Kiedy tablica jest deklarowana, tworzone jest tylko odwołanie do tablicy. Używamy new do alokacji tablicy o danym rozmiarze.

int arr[] = nowy int[rozmiar];

  • Deklaracja tablicy jest ogólnie statyczna, ale jeśli rozmiar nie jest zdefiniowany, tablica ma rozmiar dynamiczny.
  • Pamięć dla tablic jest zawsze przydzielana dynamicznie (w segmencie sterty) w Javie. Różni się to od C/C++, gdzie pamięć może być przydzielana statycznie lub dynamicznie.
  • Elementy tablicy przydzielone przez new zostaną automatycznie zainicjowane na zero (dla typów numerycznych), false (dla typów logicznych) lub null (dla typów referencyjnych).

Literal tablicowy w Javie

W sytuacji, gdy rozmiar tablicy i zmienne tablicy są już znane, można zastosować literały tablicowe. 

// Deklarowanie literału tablicowego
int[] arr = nowy int[]{ 12345678910 };

  • Długość tej tablicy określa długość utworzonej tablicy.
  • W najnowszych wersjach Javy nie ma potrzeby pisania nowej części int[].

3. Zmień element tablicy

Aby zmienić element, przypisz nową wartość do określonego indeksu. Indeks zaczyna się od 0 i kończy na (całkowitym rozmiarze tablicy) -1.

// Zmiana pierwszego elementu na 90
tablica[0] = 90;

4. Długość tablicy

Długość tablicy możemy uzyskać za pomocą właściwości długości:

// Pobieranie długości tablicy
int n = długość tablicy;

5. Dostęp i aktualizacja wszystkich elementów tablicy

  • Dostęp do wszystkich elementów tablicy można uzyskać za pomocą Java for Loop.
  • Dostęp do każdego elementu tablicy można uzyskać poprzez jego indeks.
WyjścieDostęp i aktualizacja wszystkich elementów tablicy

Program w języku Java ilustrujący tworzenie tablicy liczb całkowitych umieszcza pewne wartości w tablicy i wypisuje każdą wartość na standardowe wyjście

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

Wyjście
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  

Tablice obiektów w Javie

Tablica obiektów jest tworzona podobnie jak tablica elementów danych typu pierwotnego

Przykład : Tutaj bierzemy klasę Studenta i tworzymy tablicę Student z pięcioma obiektami Studenta przechowywanymi w tablicy. Obiekty Student należy utworzyć przy użyciu konstruktora klasy Student, a ich referencje należy przypisać do elementów tablicy.

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

Wyjście
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 }  

Co się stanie, jeśli spróbujemy uzyskać dostęp do elementów spoza rozmiaru tablicy?

JVM zgłasza wyjątek ArrayIndexOutOfBoundsException, aby wskazać, że dostęp do tablicy uzyskano z nielegalnym indeksem. Indeks jest albo ujemny, albo większy lub równy rozmiarowi tablicy.

Poniższy kod pokazuje, co się stanie, jeśli spróbujemy uzyskać dostęp do elementów spoza rozmiaru tablicy:

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

Wyjście:

Dane wyjściowe elementów poza rozmiarem tablicy

Przekazywanie tablic do metod

Podobnie jak zmienne, możemy również przekazywać tablice do metod. Na przykład poniższy program przekazuje tablicę do metody sum w celu obliczenia sumy wartości tablicy.

Przykład:

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

Wyjście
sum of array values : 15  

Wyjaśnienie

  • Ten program w języku Java demonstruje, jak przekazać tablicę do metody.
  • W metodzie main deklarowana i inicjowana jest tablica liczb całkowitych arr.
  • Metoda sum() jest wywoływana z argumentem arr.
  • Wewnątrz metody sum() wszystkie elementy tablicy dodawane są za pomocą pętli for.
  • Ostateczna suma jest następnie drukowana na konsoli.

Zwracanie tablic z metod

Jak zwykle metoda może również zwrócić tablicę. Przykładowo poniższy program zwraca tablicę z metody m1. 

Przykład:

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

Wyjście
1 2 3  

Zalety tablic Java

  • Dostęp do elementu poprzez jego indeks jest szybki i ma stałą złożoność czasową O(1).
  • Zarządzanie pamięcią: Tablice mają stały rozmiar, co sprawia, że ​​zarządzanie pamięcią jest proste i przewidywalne.
  • Organizacja danych: Tablice pomagają organizować dane w uporządkowany sposób, ułatwiając zarządzanie powiązanymi elementami.

Wady tablic Java

  • Po utworzeniu tablicy nie można zmienić jej rozmiaru, co może prowadzić do marnowania pamięci w przypadku zawyżenia rozmiaru lub niewystarczającej ilości miejsca w przypadku niedoszacowania.
  • Typ Jednorodność: Tablice mogą przechowywać tylko elementy tego samego typu danych, co może wymagać dodatkowej obsługi w przypadku mieszanych typów danych.
  • Wstawianie i usuwanie: Wstawianie lub usuwanie elementów, zwłaszcza w środku tablicy, może być kosztowne, ponieważ może wymagać przesuwania elementów.

Powiązane posty

  • Postrzępiona tablica w Javie
  • Pętla for-each w Javie
  • Klasa Arrays w Javie