1.5. Masīvi

Mērķi

  • Deklarēt un veidot masīvus no vienkāršajiem, klašu vai masīvu tipiem
  • Izskaidrot, kāpēc masīvu elementi tiek inicializēti pēc noklusēšanas
  • Izskaidrot, kā var atklāti inicializēt masīva elementus
  • Noteikt elementu skaitu masīvā
  • Izveidot daudzdimensionālu masīvu
  • Uzrakstīt kodu, lai kopētu elementus no viena tipa masīva uz citu

Ievadjautājumi

  • Kādiem nolūkiem izmantojami masīvi?

Masīva mainīgā deklarēšana

  • Masīvs var grupēt vienāda tipa datu objektus
  • Vienkāršo un klašu tipu masīvus deklarē sekojoši:
char s[];
Point p[];

char[] s;
Point[] p;
  • Deklarācija izveido vietu references glabāšanai
  • Masīvs ir objekts; to veido ar new.

Masīva izveidošana

Izmantojiet new atslēgvārdu, lai izveidotu masīva objektu. Piemēram, šādu vienkārša (char) tipa masīvu:

public char[] createArray() {
    char[] s;
    s = new char[26];
    for (int i = 0; i < 26; i++) {
        s[i] = (char)('A'+i);
    }
    return s;
}
Pamattipu masīvs

Masīvu veidošana

Cits piemērs - objektu masīvs

public Point[] createArray() {
    Point[] p;
    p = new Point[10];
    for (int i = 0; i < 10; i++) {
        p[i] = new Point(i, i+1); 
    }
    return p;
}
Referenču tipu masīvs

Masīvu inicializācija

  • Inicializēt masīva individuālos elementus
  • Izveidot sarakstu ar masīva elementiem

Divi veidi kā deklarēt, izveidot un inicializēt String masīvu:

String[] names; 
names = new String[3];
names[0] = "Kurzeme"; 
names[1] = "Latgale";
names[2] = "Vidzeme"; 
String[] names = {
    "Kurzeme", 
    "Latgale",
    "Vidzeme"
};

Divi veidi kā inicializēt datumu masīvu:

MyDate[] dates; 
dates = new MyDate[2];
dates[0] = new MyDate(4,8,1914); 
dates[1] = new MyDate(1,9,1939);
MyDate[] dates = {
    new MyDate(4,8,1914);
        new MyDate(1,9,1939);
};

Daudzdimensiju masīvi

  • Daudzdimensiju masīvi ir masīvu masīvi:
int twoDim [][] = new int [4][];
twoDim[0] = new int[5];
twoDim[1] = new int[5];

int twoDim [][] = new int [][4]; // nepareizi

Daudzdimensiju masīvi

Masīvu masīvi var nebūt taisnstūraini:

twoDim[0] = new int[2];
twoDim[1] = new int[4];
twoDim[2] = new int[6];
twoDim[3] = new int[8];

Atsevišķs daudzdimensiju masīva gadījums - taisnstūraini masīvi. To ir īpaši viegli izveidot:

int twoDim[][] = new int[4][5];

Masīvu robežas

Visi masīvu indeksi sākas ar 0:

int list[] = new int [10];
for (int i = 0; i < list.length; i++) {
  System.out.println(list[i]);
}

Masīvu izmēru mainīšana

  • Masīva izmērus pēc izveidošanas nevar mainīt
  • Var izmantot to pašu references mainīgo, lai tas norādītu uz citu masīvu ar to pašu tipu:
int myArray[] = new int[6];
   myArray = new int[10];

Masīvu kopēšana

Metode System.arraycopy()

1     // sākotnējais masīvs
2     int elements[] = { 1, 2, 3, 4, 5, 6 };
3     
4     // new larger array
5     int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
6  
7     // copy all of the elements array to the hold
8     // array, starting with the 0th index
9     System.arraycopy(elements, 0, hold, 0, elements.length);

Klase java.lang.Math

Math klase satur daudzas matemātiskas funkcijas (tās šajā klasē ir statiskas metodes)

  • Noapaļošana: ceil, floor un round
  • max, min un abs (absolūtā vērtība)
  • Trigonometrija: sin, cos, tan, asin, acos, atan, toDegrees un toRadians
  • Logaritmiskas un eksponentfunkcijas: log un exp
  • Citas: sqrt, pow un random
  • Konstantes: PI and E

Klase java.lang.String

  • String objekti ir nepārveidojamas (immutable) Unikoda simbolu virknes
  • Operācijas, kuras veido jaunus stringus: concat, replace, substring, toLowerCase, toUpperCase un trim
  • Meklēšanas operācijas: endsWith, startsWith, indexOf un lastIndexOf.
  • Salīdzināšana: equals, equalsIgnoreCase un compareTo.
  • Citas: charAt un length.

Klase java.lang.StringBuffer

StringBuffer objekti ir pārveidojamas (mutable) Unikoda simbolu virknes. Konstruktori:

  • StringBuffer() - izveido tukšu buferi
  • StringBuffer(int capacity) - izveido buferi ar norādīto sākumietilpību
  • StringBuffer(String initialString) - izveido buferi, kurš sākumā satur doto stringu

Pārveidošanas darbības: append, insert, reverse, setCharAt un setLength.

Jautājumi paškontrolei

  • Deklarēt un izveidot masīvus no vienkāršajiem, klašu vai masīvu tipiem
  • Izskaidrot, kāpēc masīvu elementi tiek (automātiski) inicializēti
  • Izskaidrot, kā (atklāti) inicializēt masīva elementus
  • Noteikt elementu skaitu masīvā
  • Prast deklarēt, izveidot, inicializēt daudzdimensiju masīvu
  • Uzrakstīt kodu, kurš kopē masīva vērtības no viena masīva uz citu
  • Kā citās programmēšanas valodās var izveidot un inicializēt, piemēram, trīsdimensiju masīvu?
  • Kādi ir masīvu lietošanas trūkumi?