Algoritmai ir duomenų struktūros
Masyvas
Masyvas (angl. array) Java kalboje yra struktūrinis duomenų tipas, skirtas laikyti fiksuotą skaičių to pačio tipo elementų. Tai reiškia, kad visos reikšmės, esančios masyve, turi būti vienodo tipo – pavyzdžiui, visi sveikieji skaičiai (int
), dešimtainiai skaičiai (float
, double
), simboliai (char
) arba net objektai. Masyvas suteikia galimybę efektyviai laikyti ir tvarkyti didelius duomenų rinkinius, nes jo elementai yra išdėstyti nuosekliai atmintyje, todėl prie kiekvieno iš jų galima greitai ir tiesiogiai prieiti per indeksą.
1. Masyvo apibrėžimas ir inicializavimas
Java kalboje masyvas gali būti apibrėžiamas ir inicializuojamas keliais būdais:
a) Masyvo deklaravimas
Masyvas deklaruojamas nurodant jo elementų tipą ir skliaustelius:
int[] masyvas; // deklaruojamas sveikųjų skaičių masyvas
Čia int[]
reiškia, kad masyve bus laikomi tik int
tipo elementai. Masyvas dar nėra sukurtas, tik deklaruotas.
b) Masyvo sukūrimas su fiksuotu dydžiu
Norint sukurti masyvą, reikia nurodyti jo dydį (elementų skaičių):
int[] masyvas = new int[5]; // sukuriamas masyvas, galintis laikyti 5 sveikus skaičius
Šiuo atveju sukuriamas sveikųjų skaičių masyvas su 5 elementais, kurių reikšmės iš pradžių yra 0
(numatytoji reikšmė sveikiesiems skaičiams).
c) Masyvo inicializavimas su konkrečiomis reikšmėmis
Masyvą galima sukurti ir inicijuoti iš karto su tam tikromis reikšmėmis:
int[] masyvas = {1, 2, 3, 4, 5}; // masyvas su konkrečiomis reikšmėmis
Čia sukurtas masyvas su 5 sveikaisiais skaičiais, kurių reikšmės nurodytos tiesiogiai.
2. Prieiga prie masyvo elementų
Masyvo elementai pasiekiami naudojant jų indeksus. Java kalboje indeksai prasideda nuo 0
, taigi pirmas elementas yra masyvas[0]
, antras – masyvas[1]
ir t. t.
int pirmasElementas = masyvas[0]; // gauna pirmo elemento reikšmę
masyvas[2] = 10; // trečiam masyvo elementui priskiria reikšmę 10
3. Masyvo dydžio nustatymas
Java masyvo dydis yra fiksuotas ir jo negalima keisti po sukūrimo. Tačiau masyvo dydį galima gauti naudojant length
atributą:
int dydis = masyvas.length; // masyvo dydis
4. Masyvų rūšys Java kalboje
Java kalboje galima naudoti tiek vienmačius, tiek daugiamačius masyvus.
a) Vienmatis masyvas
Vienmatis masyvas yra linijinis elementų sąrašas:
int[] vienmatis = {1, 2, 3, 4};
b) Dvimatis masyvas (matrica)
Java kalboje dvimačiai masyvai dažnai naudojami kaip lentelės arba matricų reprezentacija:
int[][] matrica = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Norint prieiti prie dvimačio masyvo elemento, reikia nurodyti du indeksus:
int elementas = matrica[1][2]; // gauna 5
c) Trimačiai ir daugiamačiai masyvai
Java palaiko ir daugiau nei dviejų matmenų masyvus, tačiau tokie masyvai retai naudojami, nes jų tvarkymas gana sudėtingas.
5. Ką reikia žinoti apie masyvus Java kalboje?
- Fiksuotas dydis: Kai masyvas sukurtas, jo dydis negali būti keičiamas. Jei reikia dinaminio dydžio struktūros, rekomenduojama naudoti kolekcijas, tokias kaip
ArrayList
. - Numatytosios reikšmės: Java masyvai automatiškai užpildomi numatytosiomis reikšmėmis pagal tipą. Pvz., sveikieji skaičiai (
int
) turi0
, loginiai (boolean
) –false
, o objektų masyvuose visi elementai iš pradžių yranull
. -
Klaida už ribų (ArrayIndexOutOfBoundsException): Java griežtai tikrina masyvo ribas, todėl bandant prieiti prie elemento už masyvo ribų įvyks klaida:
int[] masyvas = {1, 2, 3}; int klaida = masyvas[3]; // sukels ArrayIndexOutOfBoundsException
6. Dažniausiai naudojami masyvų metodai ir operacijos
Java kalboje nėra daug tiesioginių masyvų metodų, bet galima naudoti Arrays
klasės metodus:
-
Rūšiavimas:
Arrays.sort(masyvas); // surūšiuoja masyvą didėjančia tvarka
-
Paieška:
int indeksas = Arrays.binarySearch(masyvas, 3); // suranda elemento indeksą (tik surūšiuotame masyve)
-
Kopijavimas:
int[] naujasMasyvas = Arrays.copyOf(masyvas, masyvas.length); // sukuria masyvo kopiją
7. Masyvo praplėtimas
Norint praplėsti esamą masyvą papildoma reikšme, Java kalboje galima sukurti naują, didesnį masyvą ir perkopijuoti į jį reikšmes iš senojo masyvo:
import java.util.Arrays;
public class ExpandArray {
public static void main(String[] args) {
// Pradinis masyvas su reikšmėmis
int[] originalArray = {1, 2, 3, 4, 5};
System.out.println("Originalus masyvas: " + Arrays.toString(originalArray));
// Nauja reikšmė, kurią norime pridėti
int newValue = 6;
// Sukuriame naują masyvą, kuris yra vienu elementu didesnis už originalų
int[] newArray = new int[originalArray.length + 1];
// Perkopijuojame visas reikšmes iš originalaus masyvo į naują masyvą
for (int i = 0; i < originalArray.length; i++) {
newArray[i] = originalArray[i];
}
// Priskiriame naują reikšmę paskutinei naujojo masyvo pozicijai
newArray[newArray.length - 1] = newValue;
// Atvaizduojame išplėstą masyvą
System.out.println("Išplėstas masyvas: " + Arrays.toString(newArray));
}
}
8. Masyvo privalumai ir trūkumai
Masyvo privalumai:
- Efektyvus prieigos laikas: Prieiga prie elementų naudojant indeksus yra labai greita (O(1) laiko sudėtingumas).
- Paprasta struktūra: Tinka situacijoms, kur reikia nuoseklios duomenų struktūros su fiksuotu elementų skaičiumi.
Masyvo trūkumai
- Fiksuotas dydis: Dydis negali būti keičiamas po masyvo sukūrimo, todėl jei reikalingas kintamo dydžio masyvas, teks naudoti kitas struktūras, pvz.,
ArrayList
. - Vienarūšiai elementai: Visi masyvo elementai turi būti vieno tipo, todėl jis mažiau lankstus nei kai kurios kitos kolekcijų struktūros.
- Nėra tiesioginių metodų: Java masyvuose nėra metodų, skirtų lengvai pridėti ar pašalinti elementus, kaip tai yra kolekcijose, todėl jų funkcionalumas ribotas.