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) turi 0, loginiai (boolean) – false, o objektų masyvuose visi elementai iš pradžių yra null.
  • 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.

Paskutinį kartą puslapis keistas 2024-11-14

© Joana Katina 2016-2025. Visos teisės saugomos