Gyakorlati alapok III.

Java-nyelv néhány összetett adattípusa

 

Ó düsszeusz! Nem Hektor, vektor!

 

Az igazán klasszikus alapokon álló, ógörög invokáció drámai hangon szólította meg a Java egyik érdekes tulajdonságokkal bíró adatszerkezetét, a vektort.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A vektor dinamikus tömböt jelent, tehát automatikus méretváltozása kiküszöböli a statikus méretű tömbök ebbéli, legnagyobb hátrányát. Fontos megjegyeznünk, hogy ha nem rendelkeztünk másképpen, kezdeti mérete 10.

 

Ezt könnyű ellenőriznünk a capacity() metódusával, amely segítségével lekérdezhetjük egy üres vektor kezdőméretét:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main{
public static void main(String[] args){
    Vector vector = new Vector();
    System.out.println(vector.capacity());
    }
}

 

Végeredmény:

10

 

A fenti vector tárolt elemszáma nyilvánvalóan még 0, ezt a size() metódussal nézzük meg:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main{
public static void main(String[] args){
    Vector vector = new Vector();
    System.out.println(vector.size());
    }
}

 

Végeredmény:

0

 

Ha a kezdeti 10 elemmérettel elégedetlenek volnánk, az ensureCapacity() metódussal (szinte) tetszőleges kezdőméretet állíthatunk be (régebbi dokumentációk initialCapacity() metódusra hivatkoztak):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main{
public static void main(String[] args){
    Vector vector = new Vector();
    vector.ensureCapacity(50);
    System.out.println(vector.capacity());
    }
}

 

Végeredmény:

50

 

További előnyei közt említhetjük:

Az alábbi futtatható Java-kódban 1 egyszerű .txt formátumú, fiktív személyi adatokat tartalmazó adatállomány adatait...

 

www.informatika-programozas.hu - Letöltés

szemelyek.txt (4 KB)

 

...töltjük be Vektor típusú tömbökbe és megnézzük az osztály néhány  további alapmetódusának működését. Láthatóan nem kell méretmegadással foglalkoznunk, erről az osztály maga gondoskodik.

 

Ugyanakkor ügyeljünk a bemeneti fájl pontos elhelyezésére (itt: new FileReader("D:\\szemelyek.txt")), másként kivételekbe fogunk szaladni. A kód alapszerkezete Sike Zoltán informatika tanár oktatóanyagának része.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.io.*;
import java.util.Vector;

public class Main {

public static void main(String[] args) {
    Vector<String> vezetekNev = new Vector<>();
    Vector<String> keresztNev = new Vector<>();
    Vector<String> szuletesDatum = new Vector<>();
    Vector<String> szuletesHely = new Vector<>();
    Vector<Integer> magassag = new Vector<>();
    Vector<Integer> suly = new Vector<>();
    BufferedReader reader = null;;
        try {
        reader = new BufferedReader(new FileReader("D:\\szemelyek.txt"));
        String sor;
        while (reader.ready()) {
            sor = reader.readLine();
            System.out.println(sor);
            String[] sorelemek=sor.split(" ");
            vezetekNev.add(sorelemek[0]);
            keresztNev.add(sorelemek[1]);
            szuletesDatum.add(sorelemek[2]);
            szuletesHely.add(sorelemek[3]);
            magassag.add(Integer.parseInt(sorelemek[4]));
            suly.add(Integer.parseInt(sorelemek[5]));
        }

    System.out.println();
    System.out.print("Vezetéknevek listája: \n");
    for (int i = 0; i < vezetekNev.size(); i++) {
        System.out.print(vezetekNev.get(i) + ", ");
    }

    System.out.println();
    System.out.print("\nVan-e Róbert keresztnév? ");
    System.out.print(keresztNev.contains("Robert") ? "Van" : "Nincs");

    System.out.println();
    System.out.println("\nNoémi név a(z) " + keresztNev.indexOf("Noemi") + ". indexen található");

    System.out.println("\nA szuletesDatum vektortömb kapacitása " + szuletesDatum.capacity());

    System.out.println();
    System.out.println("Gyűjtsük ki a 180-nál nagyobb testmagasságot: ");
    for (int i = 0; i < vezetekNev.size(); i++) {
        if(magassag.get(i) > 180){
            System.out.print(vezetekNev.get(i) + " " + magassag.get(i) + "\n");
        }
    }
    } catch (FileNotFoundException fnfe) {
        System.out.println("A fájl nem található!");
    } catch (IOException ioe) {
    ioe.printStackTrace();
    } finally {
        try {
            if(reader != null) {
                reader.close();
                }
            } catch (IOException ioe) {
            System.out.println("A fájl bezárása nem sikerült!");
            }
        }
    }
}

 

Végeredmény:

Kovacs Bela 1956-01-04 Budapest 185 75
Kiss Zsombor 1980-06-11 Pécel 165 50
Horvath Istvan 1966-12-04 Siofok 180 60
Bognar Jozsef 2002-11-02 Kecskemét 171 54
Kuti David 1959-01-10 Dunakeszi 192 100
Antal Imre 1972-05-10 Csakbereny 178 76
Szekeres Zoltan 1968-05-09 Alsorakos 184 74
Alfoldi Noemi 2012-05-12 Kartal 155 50
Pethes Robert 1964-08-20 Hevízgyork 185 75
Oze Denes 2001-04-21 Diosd 164 56

Vezetéknevek listája:
Kovacs, Kiss, Horvath, Bognar, Kuti, Antal, Szekeres, Alfoldi, Pethes, Oze,

Van-e Róbert keresztnév? Van

Noémi név a(z) 7. indexen található

A szuletesDatum vektortömb kapacitása 10

Gyűjtsük ki a 180-nál nagyobb testmagasságot:
Kovacs 185
Kuti 192
Szekeres 184
Pethes 185

 

Soroljuk fel a Vektor osztály néhány további hasznos metódusát:

  • Vector(int size) - ez konstruktor függvény előre megadott mérettel építi fel a vektor tömböt,

  • void add(Object element) - vektor tömbelem hozzáadása,

  • int capacity() - vektor tömbméret,

  • void clear() - törli az összes vektor tömbelemet,

  • boolean contains(Object elem) - ellenőrzi, hogy a keresett elem benne van-e vektor tömbben,

  • void copyInto(Object[] anArray) - az összes vektor tömbelemet átmásolja a megadott tömbbe,

  • Object get(int index) - visszaadja a megadott indexen lévő vektor tömbelemet,

  • int indexOf(Object elem) - visszaadja a megadott vektor tömbelem indexszámát,

  • void insertElementAt(Object obj, int index) - vektor tömbelemet helyez be (inzertál) a megadott indexpozícióba,

  • boolean isEmpty() - ellenőrzi, hogy a vektor tömb üres-e,

  • Object lastElement() - visszaadja az utolsó vektor tömbelemet,

  • Object remove(int index) - törli a megadott indexpozícióban lévő vektor tömbelemet,

  • void removeAllElements() - törli az összes vektor tömbelemet és a vektor tömb méretét 0-ra állítja,

  • stb.