Top Banner
B IT M A N 117/1 v: 2018.02.05 B IT M A N 7. Ea: A java.util csomag Java Programozás A svájci bicska
117

A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

Nov 07, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/1 v: 2018.02.05B IT MAN

7. Ea: A java.util csomag

Java Programozás

A svájci bicska

Page 2: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/2

A java.util csomag

Tartalma:

Gyűjtemények

Property, preferencia

Dátum, idő kezelés

Nemzetköziség

Erőforrás kezelés

Logolás

Egyebek…

Page 3: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/3 B IT MAN

Page 4: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/4

Gyűjtemény keretrendszer

A gyűjtemények -tárolók, konténerek, kollekciók- olyan

típuskonstrukciós eszközök, melynek célja egy vagy

több típusba tartozó objektumok memóriában történő

összefoglaló jellegű tárolása, manipulálása és

lekérdezése.

A gyűjtemény keretrendszer (Java Collections

Framework, JCF) egy egységes architektúra, ami a

gyűjtemények használatára és manipulálására szolgál.

Page 5: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/5

Gyűjtemény keretrendszer

Jellemzők:

– Csökkenti a fejlesztési időt

• Mivel kész adatstruktúrák és algoritmusok állnak

rendelkezésünkre, a Gyűjtemény keretrendszer lehetővé

teszi, hogy a program fontosabb részével foglalkozzunk,

ahelyett, hogy alacsonyszintű programozással kelljen

foglalkoznunk.

– Növeli a programozás sebességét és minőségét

• A JCF gyors és jó minőségű algoritmus-, és adatstruktúra-

implementációkkal rendelkezik. A különböző implementációk

minden egyes interfésznél felcserélhetők, így a programokat

könnyen össze lehet hangolni a gyűjtemény

implementációkkal.

Page 6: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/6

Gyűjtemény keretrendszer

Jellemzők:

– Megengedi az együttműködést a nem kapcsolódó API-k

között

• Ha két különböző függvénykönyvtár nem illeszthető

egymáshoz közvetlenül, akkor lehet akár a keretrendszer

a közös nevező az illesztés megteremtése érdekében.

– Csökkenti az új API-k használatának és tanulásának

nehézségét

• Régen minden egyes API-nál egy kis segéd API-t

készítettek arra, hogy manipulálja az egyes

gyűjteményeket. Kevés összefüggés volt az erre a célra

készült gyűjtemények segéd API-jai között, így külön-

külön meg kell tanulni azokat, így könnyen hibát

ejthetünk ezek használatával. Az általános gyűjtemény

interfészek megjelenésétől ez a probléma már a múlté.

Page 7: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/7

Gyűjtemény keretrendszer

Jellemzők:

– Megkönnyíti az új API-k tervezését

• A tervezőknek és a kivitelezőknek nem kell újra

kidolgozni az API-t, valahányszor készítenek egy

gyűjteményekre alapozott API-t, hanem az általános

gyűjtemény interfészt használhatják.

– Elősegíti a szoftver újrafelhasználhatóságát

• Az gyűjtemény interfészekkel összhangba hozott új

adatstruktúrák természetesen újra felhasználhatók.

Hasonlóan, új algoritmus fejlesztésekor könnyen

hozzákapcsolható lesz az összes létező eddigi

megvalósításhoz.

Page 8: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/8

Gyűjtemény keretrendszer

Tartalma:

– Öt adatmodell (halmaz, lista, sor, kétvégű sor, map)

műveleteit leíró interfészeket,

– Ezen modellek néhány konkrét megvalósítását,

– Bejárókat (iterátorok),

– Néhány algoritmust,

– Az adatszerkezetek szinkronizált használatához

szükséges módozatokat.

– A használhatóság érdekében az összes interfész, illetve

ezek implementációja generikus típus.

• Ez egyben azt is jelenti, hogy elemi típust csak

becsomagolva tudunk gyűjteményben tárolni.

Page 9: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/9

Gyűjtemény keretrendszer

Adatmodellek:

– Halmaz: A matematikai halmaz fogalomnak felel meg.

Nem tartalmaz duplikált elemeket, az elemek sorrendje

nem feltétlenül meghatározott.

– Lista (szekvencia): Az elemeket egy index (sorszám)

segítségével is elérhetjük. Tartalmazhat duplikált elemeket.

– Sor (Queue): FIFO sor. Az új elem a sor végére, kivenni

elemet a sor elejéről.

– Kétvégű sor (Deque): Egy mindkét végén manipulálható

sor. Használható veremként is.

– Map: Kulcs-érték párok tárolására. A kulcsok egyediek kell

legyenek.

Page 10: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/10

Gyűjtemény keretrendszer

Négy további adatszerkezet:

– Rendezett halmaz: Néhány olyan extra funkció, ami az

elemek rendezettségét használja ki.

– "Navigable" halmaz: Egy rendezett halmaz még további

funkciókkal.

– Rendezett map: A kulcs-érték párok a kulcs szerint

rendezve tárolódnak.

– Navigable map: Rendezett map még további funkciókkal.

A régebbi adatszerkezeteket úgy módosították, hogy

igazodjon a Collection Framework-ben definiáltakhoz, így

azok is használhatóak.

Page 11: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/11

Gyűjtemény keretrendszer

Collection interface:

– A map-ek kivételével a többi adatmodellt megvalósító

interfészek közös őse.

– Közvetlen megvalósítása nincs, csak abstract

implementációi vannak.

– Nem minden metódusát kötelező megvalósítani.

– Azok a metódusai, amelyek opcionálisak úgy vannak

deklarálva, hogy dobhatnak

UnsupportedOperationException-t.

Collection

List

Map

SortedMapQueueSet

SortedSet

Page 12: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/12

Gyűjtemény keretrendszer

Collection interface tartalma:

– Nem opcionális elemek:

• Szeretnék ha az implementáció készítők

felüldefiniálnák:

– boolean equals(Object o)

– int hashCode()

• Elemek száma: int size()

• Üres-e: boolean isEmpty()

• Tartalmazás vizsgálat:

– boolean contains(Object element)

• Iterátor készítés: Iterator<E> iterator()

• Elemek tömbként kinyerése:

– Object[] toArray()

– <T> T[] toArray(T[] a)

Page 13: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/13

Gyűjtemény keretrendszer

Collection interface tartalma:

– Opcionális elemek:

• Elem hozzáadása: boolean add(E element)

• Elem törlése: boolean remove(Object element)

• Tartalmazás vizsgálat:

– boolean containsAll(Collection<?> c)

• Több elem hozzáadása:

– boolean addAll(Collection<? extends E> c)

• Több elem törlése:

– boolean removeAll(Collection<?> c)

– boolean retainAll(Collection<?> c)

• Összes elem törlése: void clear()

Page 14: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/14

Gyűjtemény keretrendszer

Halmaz (Set) interface

– Nem tartalmazhat duplikált elemeket.

• Azaz nem lehet két olyan eleme, amelyre igaz, hogy

e1.equals(e2).

• Az add metódus hamisat ad ha már van olyan elem a

halmazban.

– Tartalma: ugyanaz, mint Collection interface-é.

– A halmazműveletek:

• Elem betétele (add),

• kivétele (remove),

• tartalmazás vizsgálat (contains),

• részhalmaz vizsgálat (containsAll),

• unió (addAll),

• metszet (retainAll),

• különbség (removeAll)

Page 15: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/15

Gyűjtemény keretrendszer

Rendezett halmaz (SortedSet) interface

– A Set leszármazottja.

– Rendezettség lehet természetes sorrend vagy Comparator

alapján (lásd később)

– Plussz tartalom:

• Részhalmaz kinyerések:

– SortedSet<E> subSet(E fromElement, E toElement)

– SortedSet<E> headSet(E toElement)

– SortedSet<E> tailSet(E fromElement)

• Első, utolsó elem kinyerés:

– E first()

– E last()

• Comparator lekérdezés:

– Comparator<? super E> comparator()

Page 16: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/16

Gyűjtemény keretrendszer

Navigálható halmaz (NavigableSet) interface

– A SortedSet leszármazottja.

– Plussz tartalma részletezés nélkül:

• legkisebb elem,

• legnagyobb elem,

• egy megadott elemtől nagyobb következő elem,

• egy megadott elemet megelőző elem,

• egy adott elemtől nagyobb (kisebb) elemek

részhalmaza, stb.

Page 17: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/17

Gyűjtemény keretrendszer

Halmaz implementációk:

– HashSet:

• Hash táblás tároláson alapuló megvalósítás.

• A leggyorsabb halmaz megvalósítás.

• Elemek sorrendje nem értelmezhető, ismételt bejárás más

sorrend.

• A hash táblás tárolásból adódóan létrehozáskor célszerű

megadni kezdő kapacitást és load faktor-t.

• A Set-hez képest nem definiál plussz funkciókat.

– LinkedHashSet:

• Hash táblás és láncolt listás tárolás együttes alkalmazása.

• Valamivel lassabb, mint a HashSet, de az elemek bejárási

sorrend állandó (a beszúrási sorrend), valamint az elemek

bejárása is gyorsabb.

• Funkciói megegyeznek a HashSet-tel.

Page 18: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/18

Gyűjtemény keretrendszer

Halmaz implementációk:

– TreeSet:

• Kiegyensúlyozott fán tárol.

• A leglassabb halmaz implementáció, de a SortedSet és

a NavigableSet interface-ket is implementálja vagyis az

elemek sorrendje kezelhető.

– EnumSet:

• Egy speciális halmaz, amely enum elemeket

tartalmazhat és plussz funkciókkal rendelkezik az enum

elemeinek kezeléséhez.

– Egyéb implementációk: nem részei a CF-nek. Többnyire a

konkurens hozzáférés támogatásával kapcsolatosak.

Page 19: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/19

Gyűjtemény keretrendszer

Bejárók (Iterator, ListIterator)

– A Collection alapú gyűjtemények elemeinek bejárására

valók.

– Az iterátor kinyerése a Collection-ban deklarált Iteratoriterator() metódussal.

– A ListIterator az Iterator leszármazottja. Csak a List-ek

esetén használható. Kinyerése a ListIteratorlistIterator() metódussal.

– Iterator tartalma: boolean hasNext()

• igaz, ha van következő elem.

– E next() : a következő elemet adja, ha nincs, akkor

kivételt dob.

– void remove(): opcionális, törli a next()-el előzőleg

megkapott elemet.

Page 20: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/20

Gyűjtemény keretrendszer

Bejárók (Iterator, ListIterator):

– A ListIterator tartalma: ua. mint Iterator, egyéb metódusok:

– boolean hasPrevious()

– E previous() : visszafele bejárás

– int nextIndex()

– int previousIndex() : visszaadja az indexét a következő

vagy előző elemnek.

– void set(E e): opcionális, megváltoztatja az aktuális elemet

(utoljára visszaadott)

– void add(E e): opcionális, beszúr az aktuális elem után

Bejárók (Enumerator):

– Egy régebbi bejáró az Iterator-ral egyenértékű, de

hosszabb metódusneveket használ.

Page 21: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/21

Gyűjtemény keretrendszer

Bejárás: (c egy Collection fajta)

Iterator<E> it = c.iterator(); while (it.hasNext()) {

E elem = it.next(); //műveletek elemmel

}

for (E elem : c) { //műveletek elemmel

}

Collection módosítása bejárás közben: csak a bejáró

metódusaival lehetséges, különben hiba keletkezik.

Vagy:

while (it.hasNext()) {c.remove(objektum); //hiba!!System.out.println(it.next());

}

Page 22: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/22

Példakód – HashSet

import java.util.HashSet;import java.util.Iterator;public class Util_1 {

public static void main(String[] args) {HashSet<String> set = new HashSet<String>(); set.add("alma"); set.add("barack"); set.add("ananász"); set.remove("barack"); //equals alapján keres set.add("szilva"); set.add("málna"); set.add("alma"); //nem rakja bele, false vissza

System.out.println("List 1:");for (String elem : set) System.out.println(elem);

Page 23: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/23

Példakód – HashSet

System.out.println("List 2:");Iterator<String> it = set.iterator();

while (it.hasNext()) System.out.println(it.next()); String[] st = new String[set.size()]; //elemek tömbbe rakásaset.toArray(st); System.out.println("List 3:");for (String elem : st) System.out.println(elem);

it = set.iterator();System.out.println("Delete:");while (it.hasNext()) {

String elem = it.next(); if (elem.startsWith("a")) it.remove();

}System.out.println("List 4:");for (String elem : set) System.out.println(elem);

}}

Page 24: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/24

public class Employee implementsComparable<Employee> {

private String name;private int age;

public Employee(String name, int age) {super();this.name = name;this.age = age;

}

public String getName() {return name;

}public void setName(String name) {

this.name = name;}public int getAge() {

return age;}public void setAge(int age) {

this.age = age;}public int compareTo(Employee o) {

return this.age - o.getAge(); }

}

Példakód – SortedSet

Page 25: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/25

Példakód – SortedSet

import java.util.Iterator;import java.util.SortedSet;import java.util.TreeSet;

public class EmpSortedSet {public static void main(String[] args) {

SortedSet set = new TreeSet();

set.add(new Employee("Béla", 60));set.add(new Employee("Eszmeralda", 50));set.add(new Employee("Rómeó", 10));set.add(new Employee("Ödön", 20));set.add(new Employee("Hümér", 40));set.add(new Employee("Lujza", 30));

System.out.println("Set after sorting:");Iterator it = set.iterator();while (it.hasNext()) {

Employee epm = (Employee) it.next();System.out.println("Employee "+epm.getName()+

", his age: "+epm.getAge());}

Page 26: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/26

Példakód – SortedSet

System.out.println("\nFirst Employee: " +((Employee)set.first()).getName());

System.out.println("Last Employee: " + ((Employee)set.last()).getName());

System.out.println("\nheadSet(-30) result:");SortedSet headSet = set.headSet(new Employee("Lujza", 30));Iterator headSetIt = headSet.iterator();while (headSetIt.hasNext()) {

Employee epm = (Employee) headSetIt.next();System.out.println("Employee " + epm.getName() +

" his age: " + epm.getAge());}

Page 27: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/27

Példakód – SortedSet

System.out.println("\nsubSet(10-50) result:");SortedSet subSet = set.subSet(new Employee("Rómeó", 10),

new Employee("Eszmeralda", 50));Iterator subSetIt = subSet.iterator();while (subSetIt.hasNext()) {

Employee epm = (Employee) subSetIt.next();System.out.println("Employee " + epm.getName() +

" his age: " + epm.getAge());}

System.out.println("\ntailSet(40-) result:");SortedSet tailSet = set.tailSet(new Employee("Hümér", 40));Iterator tailSetIt = tailSet.iterator();while (tailSetIt.hasNext()) {

Employee epm = (Employee) tailSetIt.next();System.out.println("Employee " + epm.getName() +

" his age: " + epm.getAge());}

}}

Page 28: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/28

Gyűjtemény keretrendszer

Lista (List) interface

– Tartalma: Ua., mint Collection. További lehetőségek:

– Nem opcionális elemek:

• Elérés index alapján:

– E get(int index)

• Elem keresése:

– int indexOf(Object o)

– int lastIndexOf(Object o)

• Egy többet tudó iterátor (a ListIterator) kinyerése:

– ListIterator<E> listIterator()

– ListIterator<E> listIterator(int index)

• Rész lista kinyerése:

– List<E> subList(int from, int to)

Page 29: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/29

Gyűjtemény keretrendszer

Lista (List) interface

– Opcionális elemek:

• Adott indexű elem felülírása:

– E set(int index, E element)

• Elem beszúrása:

– void add(int index, E element)

• Adott indexű elem törlése:

– E remove(int index)

• Több elem beszúrása:

– boolean addAll(int index,

Collection<? extends E> c)

Page 30: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/30

Gyűjtemény keretrendszer

Lista implementációk:

– ArrayList:

• Dinamikus tömb tárolású.

• Fontos jellemzője a kezdő kapacitás és a növekmény.

• A List interfésze opcionális elemeit is megvalósítja, nem

definiál további funkcionalitást.

• Általában gyorsabb, mint a LinkedList, főleg indexes elérés

használata esetén.

– LinkedList:

• Láncolt lista tárolású.

• A List interfészen kívül megvalósítja a Queue és Dequeinterfészeket is, tehát sorként és veremként is használható.

• Sok elem esetén a hozzáadás, törlés gyorsabb, mint az ArrayList.

Page 31: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/31

Gyűjtemény keretrendszer

Lista implementációk:

– Vector:

• Nem része a gyűjtemény keretrendszernek.

• Egy korábbi megvalósítás, amelyet utólag módosítottak úgy,

hogy implementálja a List-et.

• Megfelel egy ArrayList-nek, amely szinkronizált

metódusokkal rendelkezik.

– Stack:

• Szintén egy régebbi megvalósítás, a Vector leszármazottja.

• További verem használati funkciók.

• Helyette a Deque implementációi célszerűek.

– Egyéb megvalósítások: léteznek, nem részei a CF-nek.

Page 32: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/32

Példakód – ArrayList

import java.util.ArrayList;

public class ArrayListExample {public static void main(String args[]) {

ArrayList<String> arrL = new ArrayList<String>();arrL.add("Albertin");arrL.add("Helka");arrL.add("Cinnia");arrL.add("Stella");arrL.add("Abdon");

System.out.println("Current elements:"+arrL);System.out.println("Current 2. element:"+arrL.get(1));

System.out.println("\nIndex of Cinnia: "+arrL.indexOf("Cinnia"));System.out.println("Helka is in array: "+arrL.contains("Helka"));

arrL.set(2, "Flamina");System.out.println("Current elements:"+arrL);

Page 33: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/33

Példakód – ArrayList

arrL.add(0, "Riza");arrL.add(1, "Jarmila");System.out.println("\nCurrent elements:"+arrL);System.out.println("Current 2. element:"+arrL.get(1));

arrL.remove("Damáz"); //Nem dob hibát!arrL.remove("Helka"); //Indexek módosulnak!System.out.println("\nCurrent elements:"+arrL);System.out.println("Current 2. element:"+arrL.get(1));

arrL.remove(1);System.out.println("\nCurrent elements:"+arrL);System.out.println("Current 2. element:"+arrL.get(1));

for (int j = 0; j < arrL.size(); j++) if (j == 1 || j == 3) arrL.remove(j); //Hibás logika!!

System.out.println("\nCurrent elements:"+arrL);}

}

Page 34: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/34

Gyűjtemény keretrendszer

A FIFO sor (Queue) interface:

– Létezhetnek kapacitás korláttal rendelkező megvalósításai.

– Tartalma: A Collection-ból öröklődtek az elemek,

módosult az add úgy hogy IllegalStateException-t dob,

ha tele van a sor.

– boolean offer(E e) : ua, mint add csak nem kivételt dob

ha tele van, hanem false az eredmény

– E element() : Visszaadja a sor elején levő elemet, kivételt

dob, ha üres a sor.

– E peek() : ua. mint element(), csak null-t ad ha üres a sor

– E remove() : visszaadja és kitörli a sor elején levő elemet,

kivételt dob, ha üres a sor

– E poll() : ua. mint remove, csak null-t ad ha üres a sor.

Page 35: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/35

Gyűjtemény keretrendszer

A Queue implementációi:

– LinkedList: Lásd korábban a listáknál

– PriorityQueue:

• Egy kapacitás korlát nélküli sor, amelyben az elemek nem

berakás sorrendjében, hanem egy megadott rendezettségi

sorban vannak.

• A lista eleje mindig a rendezettségi sor eleje.

• További funkcionalitás: a Comparator (Lásd később

összehasonlítás, rendezés) objektum lekérdezhető.

– ArrayDeque:

• Megvalósítás dinamikus tömbön. Az elemek sorrendje a

berakási sorrend. Megvalósítja a Queue és a Deque

interface-t is.

– Egyéb megvalósítások: nem részei a CF-nek.

Page 36: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/36

Példakód – Queue

import java.util.LinkedList;import java.util.Queue;

public class QueueExample {public static void main(String args[]) {

Queue<Integer> myQ=new LinkedList<Integer>();

myQ.add(1);myQ.add(6);myQ.add(3);System.out.println(myQ);

int first=myQ.poll();

System.out.println("First out: "+first);System.out.println(myQ);

}}

Page 37: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/37

Gyűjtemény keretrendszer

A kétvégű sor (Deque) interface

– Double Ended Queue. A Queue leszármazottja.

– Műveletei:

• Beszúrás: addFirst, offerFirst, addLast, offerLast, add==addLast, offer==offerLast, push==addFirst

• Kiolvasás törléssel: removeFirst, pollFirst, removeLast, pollLast, remove==removeFirst, poll==pollFirst, pop==removeFirst

• Kiolvasás: getFirst, peekFirst, getLast, peekLast, element==getFirst, peek==peekFirst

– Kétvégű sor implementációk:

• LinkedList: már volt róla szó

• ArrayDeque: már volt róla szó

Page 38: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/38

Példakód – Queue

import java.util.LinkedList;import java.util.Deque;

public class DequeExample {public static void main(String args[]) {

Deque<Integer> dq=new LinkedList<Integer>();dq.addLast(11);dq.addLast(16);dq.addFirst(42);dq.addFirst(45);

System.out.println(dq);System.out.println("Deque size : "+dq.size());

System.out.println("\nPeek Last Value : "+dq.peekLast());System.out.println("Remove Last Value : "+dq.pollLast());System.out.println("Remove Last Value : "+dq.pollLast());System.out.println("Remove Last Value : "+dq.pollLast());System.out.println(dq);

}}

Page 39: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/39

Gyűjtemény keretrendszer

Collection

List Queue

NavigableSet

HashSet

SortedSet

TreeSet

LinkedHashSet

Set

PriorityQueue

Dequeue

ArrayDequeue

ArrayList

LinkedList

Stack

Vector

Final Class Interface

Page 40: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/40

Gyűjtemény keretrendszer

A Map interface:

– Kulcs-érték párok. Nem tartalmazhat duplikált kulcsot!

– Tartalma:

• V put(K key, V value);

• V get(Object key);

• V remove(Object key);

• boolean containsKey(Object key);

• boolean containsValue(Object value);

• int size();

• boolean isEmpty();

• void putAll(Map<? extends K, ? extends V> m);

• void clear();

• public Set<K> keySet();

• public Collection<V> values();

• public Set<Map.Entry<K,V>> entrySet();

Page 41: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/41

Gyűjtemény keretrendszer

A SortedMap interface:

– A Map leszármazottja

– Az elemek rendezett tárolásához.

– A rendezettség természetes vagy Comparator alapján.

– Tartalma:

• Comparator<? super K> comparator();

• SortedMap<K, V> subMap(K fromKey, K toKey);

• SortedMap<K, V> headMap(K toKey);

• SortedMap<K, V> tailMap(K fromKey);

• K firstKey(); K lastKey();

Page 42: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/42

Gyűjtemény keretrendszer

A NavigableMap interface:

– A SortedMap leszármazottja

– További funkciók részletezés nélkül:

• ugyanazok, mint a NavigableSet esetén, de mindenből

kettő létezik:

– pl. legkisebb elem helyett:

» legkisebb kulcs kinyerése

» legkisebb kulcsú kulcs-értékpár kinyerése

– legkisebb kulcsú elem,

– legnagyobb kulcsú elem,

– egy megadott kulcstól nagyobb kulcsú következő elem,

illetve előző elem,

– egy adott kulcstól nagyobb (kisebb) kulcsú elemek

részMap-je, stb.

Page 43: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/43

Gyűjtemény keretrendszer

A Map implementációi:

– HashMap: Hash táblás megvalósítás. Sebesség jó,

elemek sorrendisége nincs. Plusz funkcionalitás nincs. –

– LinkedHashMap: Hash tábla és láncolt lista tárolás.

Beszúrási sorrend. Sebesség kicsivel kisebb.

– TreeMap: Kiegyensúlyozott fán tárol. A Map interface-n

kívül megvalósítja a NavigableMap és a SortedMap

interface-ket is. Tehát a sebesség kisebb, de rendezett

elemeket kapunk.

– EnumMap: A kulcsok egy enum típus konstansai.

– WeakHashMap: A kulcsok gyenge referenciával. Ha egy

kulcsra nincs külső referencia, törlődik.

Page 44: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/44

Gyűjtemény keretrendszer

A Map implementációi:

– IdentityHashMap: Speciális. Nem equals()-t használ

egyezőségre, hanem ==-t

– HashTable: Nem tartozik a CF-hez. Egy korábbi

megvalósítás utólag módosítva úgy, hogy implementálja a

Map-et. Megfelel a HashMap-nek csak szinkronizált.

– Properties: Szintén régebbi gyűjtemény fajta. A

HashTable leszármazottja. A kulcsok és az értékek csak

String-ek lehetnek. Léteznek letárolással, visszatöltéssel

kapcsolatos metódusai. Lásd még később.

– Egyéb megvalósítások: Léteznek, nem részei a CF-nek.

Page 45: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/45

Java Map keretrendszer

NavigableMap

SortedMap

Map

LinkedHashMap

HashMap

HashTable

TreeMap

AbstractMap

Properties

IdentityHashMap WeakHashMap EnumMap

Final Class

Interface

Page 46: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/46

import java.util.Map;import java.util.HashMap;public class HashMapExample {

public static void main(String args[]) {HashMap<Integer,String> Hm=new HashMap<Integer,String>();Hm.put(1,"Steven");Hm.put(null,null);Hm.put(6,"Clark");Hm.put(3,"Jack");Hm.put(3,"Jack");System.out.println(Hm);

System.out.println("Item Removed : "+Hm.remove(1));Hm.put(null,"Dorotea");System.out.println(Hm);

changeKey(Hm, null, 4);Print(Hm);

}public static void changeKey (HashMap<Integer,String> hm,

Integer key, Integer newkey){Object obj = hm.remove(key);hm.put(newkey, (String)obj);

}public static void Print (HashMap<Integer,String> hm){

for(Map.Entry m:hm.entrySet()) System.out.println("Key: "+m.getKey()+" | Value= "+m.getValue());

}}

Példakód – HashMap

Page 47: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/47

Gyűjtemény keretrendszer

Egyenlőség:

– A gyűjtemények mindegyike az elemek egyenlőségének

vizsgálatához (contains, indexOf, stb.) az elem equals() metódusát használja!

Sorrendiség:

– Azoknál a gyűjteményeknél, ahol rendezettség van, vagy

bármiféle kisebb, nagyobb reláció kétféle módon

hasonlíthatunk össze elemeket:

• Természetes sorrend alapján,

• Comparator objektum alapján.

Page 48: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/48

Gyűjtemény keretrendszer

Természetes sorrend:

– Az elemnek implementálnia kell a java.lang.Comparable

interface-t, amely egyetlen metódust tartalmaz:

• int compareTo(T m)

– A metódus természetes logika szerinti működése:

• x.compareTo(y) <0, ha x < y

• x.compareTo(y) >0, ha x > y

• x.compareTo(y) ==0, ha x.equals(y)

Page 49: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/49

Gyűjtemény keretrendszer

Sorrend a Comparator objektum alapján:

– A sorrendiség megállapításához mindig meg kell adni egy

java.util.Comparator interfészt implementáló

objektumot.

– Ennek előnye, hogy több különböző Comparator

objektumom is lehet, tehát leht több rendező szempontom.

– Comparator tartalma:

• int compare(T o1, T o2)

• boolean equals(Object o)

Page 50: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/50

Gyűjtemény keretrendszer

Algoritmusok

– Számos algoritmust készítettek, amelyet gyűjtemények

elemein lehet végrehajtani.

– Ezeket a Collections osztályba tették.

– Algoritmusok:

• Rendezés,

• Keverés,

• Minimum (maximum) keresés,

• Bináris keresés,

• Elemek sorrendjének megfordítása,

• Feltöltés egy értékkel,

• Másolás egy másik gyűjteménybe,

• Elemek felcserélése, stb.

Page 51: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/51

Példakód – Algoritmusok

Collections.sort(alkList, NEVCOMP); for (Alkalmazott alk : alkList) System.out.println(alk);

Collections.sort(alkList, FIZCOMP); for (Alkalmazott alk : alkList) System.out.println(alk);

private static final Comparator<Alkalmazott> NEVCOMP = new Comparator<Alkalmazott>(){

public int compare(Alkalmazott o1, Alkalmazott o2) { return o1.getNev().compareTo(o2.getNev());

}};

private static final Comparator<Alkalmazott> FIZCOMP = new Comparator<Alkalmazott>(){

public int compare(Alkalmazott o1, Alkalmazott o2) {return (int)Math.signum(o1.getFizetes()- o2.getFizetes());

}};

Page 52: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/52

Teszt 1.

Mekkora egy HashMap alapértelmezett kapacitása (mérete)?

20

16

12

10

1024

Page 53: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/53

Teszt 2.

Mi lesz a kód kimenete?

[java.util.HashMap@69d60e531]

Valamilyen (előre nem definiálható sorrendben kiíródnak az

adatok

{1=one, 2=two, 3=three}

{1=one, 3=three , 2=two}

import java.util.*; public class COL { public static void main(String a[]){ Map s = new HashMap(); s.put("1","one"); s.put("3","three"); s.put("2","two"); System.out.println(s);

} }

Page 54: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/54

Teszt 3.

Mi lesz a kód kimenete?

[java.util.HashMap@69d60e531]

Valamilyen (előre nem definiálható sorrendben kiíródnak az

adatok

{1=one, 2=two, 3=three}

{1=one, 3=three , 2=two}

import java.util.*; public class COL { public static void main(String a[]){ Map s = new LinkedHashMap(); s.put("1","one"); s.put("3","three"); s.put("2","two"); System.out.println(s);

} }

Page 55: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/55

Teszt 4.

Mi lesz a kód kimenete?

Fordítási hiba: index cannot null in java.util.Hashtable

Futási hiba: NullPointerException

{null=null, 1=one, 2=two}

{3=three, null=null, 1=one}

import java.util.*; public class COL { public static void main(String a[]){ Map s = new Hashtable(); s.put("3","three"); s.put(null,null);s.put("1","one"); System.out.println(s);

} }

Page 56: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/56

Teszt 5.

Lehet null értéket hozzáadni egy List-hez (listához)?

IGEN

NEM

Page 57: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/57

Teszt 6.

Melyik interfészt kell használnunk, ha olyan gyűjteményt

akarunk készíteni, amelyikben egy kulcs azonosít egy értéket?

SortedSet

Map

NavigableList

NavigableSet

Page 58: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/58

Teszt 7.

Mi lesz a kód kimenete?

Fordítási hiba: error ' ; ' excepted-new ArrayList<Integer>

Fordítási hiba: cannot find symbol class Number

Futási hiba: ClassCastException

[1, 2]

import java.util.*; public class COL { public static void main(String a[]){ List<Integer> integer = new ArrayList<Integer>(); integer.add(1); integer.add(2); List<Number> number = (List)integer; System.out.println(number);

} }

^

Page 59: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/59

Teszt 8.

Mi lesz a kód kimenete?

[B, C, A, B]

[A, B, B, C]

[A, B, C]

[B, C, A]

import java.util.*;public class ABC { public static void main(String[] a){HashSet<String> hset = new HashSet<String>();hset.add("B");hset.add("C");hset.add("A");hset.add("B");System.out.println(hset);

}}

Page 60: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/60

Teszt 9.

Az alábbi sor deklaráció helyes?

IGEN

NEM

Queue que = new Queue<String>;

Page 61: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/61

Teszt 10.

Adott az alábbi kódrészlet. Mely utasítások helyesek (hiba

nélkül végrehajthatók) ?

Queue<String> myQ=new LinkedList<String>();myQ.add("A");myQ.add("C");myQ.add("H");

System.out.println(myQ);

System.out.println(myQ.element());

System.out.println(myQ.peek());

System.out.println(myQ.peekLast());

myQ.remove();

myQ.removeAll();

System.out.println(myQ.size());

myQ.addLast("W");

Page 62: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/62 java.util.Date by Salvador Dali

Page 63: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/63

Dátum, idő kezelés

Date:

– Egy időpont miliszekundumos pontossággal.

– Legtöbb metódusa elavult, nem használatos.

– Használatos: Date(), equals(), toString(), getTime(),

setTime()

TimeZone: Absztrakt osztály időzónák kezeléséhez.

SimpleTimeZone: A jelenleg használatos időzóna és

téli nyári időszámítás megvalósítás.

Calendar: Absztrakt osztály dátum, idő, naptár

kezeléséhez.

GregorianCalendar: A Calendar leszármazottja. Az

összes dátum, idő, naptár kezelő funkció.

Page 64: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/64

java.util.Calendar

Aktuális időpont lekérése:

– public static Calendar getInstence();

Metódusok:

– int get(int field_constant);

– void set(int field_constant, value_constant);

Field Constants:• ERA• YEAR• MONTH• WEEK_OF_YEAR• DATE• AM_PM• WEEK_OF_MONTH• DAY_OF_MONTH

Field Constants:• HOUR• DAY_OF_YEAR• DAY_OF_WEEK• MINUTE• HOUR_OF_DAY• MILLISECOND• SECOND• DAY_OF_WEEK_IN_MONTH

Value Constants:• SUNDAY to SATURDAY• JANUARY to DECEMBER• AM, PM

Page 65: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/65

Példakód

import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.text.SimpleDateFormat;public class DatumMuveletek {

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");

public static void main(String[] args) {System.out.println(aktualisDatum());System.out.println(DtoS(aktualisDatum()));Date d1=datumMegadottAdatokkal2(2020,11,29,5,17,14);System.out.println(DtoS(d1));

}

private static Date aktualisDatum() {return new Date();

}private static String DtoS (Date d) {

return sdf.format(d).toString();}private static Date CaltoD (Calendar cal) {

return cal.getTime();}

Page 66: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/66

Példakód

private static Calendar DtoCal (Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar;

}

private static Calendar aktualisDatumCal() {return Calendar.getInstance();

}

private static Date datumMegadottAdatokkal(int ev, int honap, int nap, int ora, int perc, int mp) {

Calendar cal = Calendar.getInstance();cal.set(ev, honap-1, nap, ora, perc, mp);return cal.getTime();

}

private static Date datumMegadottAdatokkal2(int ev, int honap,int nap, int ora, int perc, int mp) {

Calendar cal = new GregorianCalendar(ev,honap-1,nap,ora,perc,mp);return cal.getTime();

}

Page 67: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/67

Példakód

private static Calendar datumToCalendar(Date d) {Calendar cal = Calendar.getInstance();cal.setTime(d);return cal;

}private static int[] datumReszei(Date d) {

int[] reszek = new int[6];Calendar cal = datumToCalendar(d);reszek[0] = cal.get(Calendar.YEAR);reszek[1] = cal.get(Calendar.MONTH) + 1;reszek[2] = cal.get(Calendar.DAY_OF_MONTH);reszek[3] = cal.get(Calendar.HOUR_OF_DAY);reszek[4] = cal.get(Calendar.MINUTE);reszek[5] = cal.get(Calendar.SECOND);return reszek;

}private static long ketDatumKulonbsegeMasodpercben(Date elso,

Date masik) {long elsoMilisec = datumToCalendar(elso).getTimeInMillis();long masikMilisec = datumToCalendar(masik).getTimeInMillis();return (elsoMilisec - masikMilisec) / 1000;

}

Page 68: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/68

Példakód

private static Date datumEveMegvaltoztatas(Date datum, int ujev) {Calendar cal = datumToCalendar(datum);cal.set(Calendar.YEAR, ujev);return cal.getTime();

}

private static Date datumCsokkentve(Date datum, int napok) {Calendar cal = datumToCalendar(datum);cal.add(Calendar.DAY_OF_YEAR, -50);return cal.getTime();

}

private static boolean datumElsoKisebbE(Date d1, Date d2) {return d1.before(d2);

}}

Page 69: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/69

Példakód

import java.util.*;

public class GregCalDem {public static void main(String[] args) {

GregorianCalendar cal = (GregorianCalendar)GregorianCalendar.getInstance();

System.out.println("" + cal.getTime());int year = cal.get(GregorianCalendar.YEAR);boolean isLeapYear = cal.isLeapYear(year);System.out.println(""+year+" is leap year:" + isLeapYear);

isLeapYear = cal.isLeapYear(2020);System.out.println("2020 is leap year:" + isLeapYear);

cal.add(GregorianCalendar.DATE, -5);System.out.println("Date:" + cal.getTime());

cal.roll(GregorianCalendar.HOUR, 4);System.out.println("Date:" + cal.getTime());

}}

Page 70: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/70

Teszt 11.

Az alábbi metódus kódja helyes?

public String DateToString(Date d) {SimpleDateFormat sdf =

new SimpleDateFormat("yyyy.MM.dd HH:mm");return sdf.format.toString();

}

IGEN

NEM

Page 71: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/71

Teszt 12.

Az alábbi metódus kódja helyes?

public Date CalendarToDate (Calendar cal) {return cal.getDate();

}

IGEN

NEM

Page 72: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/72

Teszt 13.

java.util.Date

java.util.SimpleDateFormat

java.util.DateFormat

java.util.TextFormat

java.text.Format

java.text.SimpleDateFormat

Melyik osztály(oka)t kell importálni, hogy a kód

megfelelően működjön!

public String DateToString(Date d) {SimpleDateFormat sdf =

new SimpleDateFormat("yyyy.MM.dd HH:mm");return sdf.format(d).toString();

}

Page 73: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/73

Teszt 14.

java.util.Date

java.util.Calendar

java.util.GregorianCalendar

java.util.Calendar.GregorianCalendar

Melyik osztály(oka)t kell importálni, hogy a kód

megfelelően működjön!

public Date CalendarToDate (Calendar cal) {return cal.getTime();

}

Page 74: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/74

Teszt 15.

Melyik kód írja ki helyesen a dátumot?

import java.util.Calendar;import java.text.SimpleDateFormat;public class ABC {

public static void main(String[] a){Calendar cal = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");

String fd = ???System.out.println(fd);

}}

format.sdf(cal.getTime());

sdf(cal.getTime());

sdf.format(cal.getTime());

format.sdf(cal.getTime()).toString();

Page 75: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/75

Teszt 16.

Mit ír ki az alábbi kód?

import java.util.Calendar;public class ABC { public static void main(String[] a){Calendar cal = Calendar.getInstance();cal.set(Calendar.HOUR, 73);cal.set(Calendar.MINUTE, 158);cal.set(Calendar.SECOND, 60);System.out.print(cal.get(Calendar.HOUR) + ":");System.out.print(cal.get(Calendar.MINUTE) + ":");System.out.print(cal.get(Calendar.SECOND));

}}

1:38:0

1:39:0

3:39:0

73:158:60

Egyéb időpontot

Page 76: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/76

Teszt 17.

Calendar cal = Calendar.getInstance();

Date date = new Date();

LocalDateTime now = LocalDateTime.now();

Calendar cal=null;

cal.setTime(new Date());

Date date=null;

date=new Calendar().getTime();

Date date=null;

date=new GregorianCalendar().getTime();

Jelölje meg az aktuális dátum lekérésének összes

helyes módját!

Page 77: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/77

Hello!

Hallo!

Heló!

Hola!

Namastḕ!

java.util.Locale – Nemzetköziség

Page 78: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/78

Nemzetköziség

Internationalization (i18n)

Localization (l10n)

Az internacionalizálás és a honosítás (más szavakkal

kulturális beágyazás vagy nyelvi lokalizáció) olyan

módszerek, melyekkel termékeket vagy szoftvereket viszünk

át (adaptálunk) más, nem belföldi környezetbe, főként más

országokba és kultúrákba.

Programok esetén ezek azon elemek, amelyek függnek a

nyelvi, régió környezettől:

– szám, dátum, idő, pénz formátumok

– szöveges részek (feliratok), szöveg sorrendiség

– egyéb interfész elemek: képek, hangok, multimédia

elemek, méretek stb.

Page 79: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/79

Nemzetköziség

A nemzetköziségre felkészített program esetén a lokalizáció a

program megváltoztatása nélkül mehet végbe.

Megoldás: az adatok (szövegek, formátumok, stb.) nincsenek

fixen beépítve a programba, hanem a programon kívül

tárolódnak, minden lehetséges (szükséges) környezetre. A

program az aktuális környezetnek megfelelőt fogja használni.

A JVM átveszi a host-tól a felhasználó által beállított

környezetet. Ez lesz az alapértelmezett környezet.

A Javaban nem kötelező a teljes programban végig ugyanazt

a környezetet használni, bármelyik környezetfüggő

művelethez megadhatunk új környezetet.

Page 80: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/80

Nemzetköziség

A java.util.Locale osztály

Azonosít: egy nyelvet, földrajzi helyet, egyéb körülményt azaz

egy környezetet.

– Az első paraméter egy ISO-639 szerinti nyelvkód (pl. en,

de, hu).

– A második paraméter egy ISO-3166 szerinti országkód (pl.

GB, DE, HU).

– Harmadik paraméterként legtöbbször platformot szokás

megadni (UNIX, WIN).

Létrehozás a konstruktorral:

– Locale a = new Locale("de") //csak nyelvet azonosít

– Locale b = new Locale("de", "DE"); //nyelv és ország

– Locale b = Locale.GERMANY; //teljes azonosítás

Page 81: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/81

Nemzetköziség

Locale műveletei:

– Lekérdezni az alapértelmezettet:

• static Locale getDefault()

– Lekérdezni az összes elérhetőt:

• static Locale[] getAvailableLocales()

– Beállítani az alapértelmezettet:

• static void setDefault(Locale)

– Lekérdezni a részeit:

• getCountry(),

• getLanguage(),

• getVariant(),

• getDisplayLanguage(), stb.

Page 82: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/82

Nemzetköziség

Szám, dátum, idő, pénznem formátum beállítása

– A java.util.text csomagban található osztályokkal

Szám, pénznem, százalék formázás:

– NumberFormat (abstract), DecimalFormat

1. lépés: A format objektum legyártása

– A NumberFormat osztály statikus metódusaival:

• Az aktuális Locale-hoz:

– NumberFormat getXXXInstance()

• Megadott Locale-hoz:

– NumberFormat getXXXInstance(Locale)

Page 83: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/83

Nemzetköziség

Szám, pénznem, százalék formázás:

– A getXXXInstance-ban az XXX lehet:

• Integer: egész formázáshoz

• Number: valós formázáshoz

• Currency: pénznem formázáshoz

• Percent: százalék formázáshoz

• Például:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);

Page 84: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/84

Nemzetköziség

Szám, pénznem, százalék formázás:

– A DecimalFormat konstruktorával egy megadott pattern és

az aktuális Locale szerint formázó objektumot kaphatunk.

Például:

– Egy megadott Locale és megadott pattern formázóját

felhasználva: Például:

NumberFormat nf = new DecimalFormat("#,##0.0");

NumberFormat nf = NumberFormat.getNumberInstance(loc); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern);

Page 85: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/85

Nemzetköziség

Szám, pénznem, százalék formázás:

– 2. lépés: Ha szükséges, állítsuk be a formázót

• Leggyakoribb beállítások:

– setGroupingUsed(boolean newValue)

– setRoundingMode(RoundingMode roundMode)

– setMinimumFractionDigits(int newValue)

– 3. lépés: formázás vagy parse-olas

• Formázás a formázó objektum format metódusával

– String s = nf.format(1234567.123);

• Parse-olás a parse metódussal.

Page 86: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/86

Nemzetköziség

Szám, pénznem, százalék formázás:

– Lehetséges még a formátumban használt szimbólumokat

is megváltoztatni (tizedes jel, ezres elválasztó jel, stb.) a

DecimalFormatSymbols osztály segítségével. Példa:

DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(loc);

dfs.setDecimalSeparator('.');dfs.setGroupingSeparator(','); DecimalFormat df =

(DecimalFormat)DecimalFormat.getInstance();df.setDecimalFormatSymbols(dfs);System.out.println(df.format(1234567.123));

Page 87: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/87

Nemzetköziség

Dátum, idő formázás:

– Kezelése: DateFormat, SimpleDateFormat

– A megfelelő Locale formátumainak lekérése:

• DateFormat getDateInstance()

• DateFormat getTimeInstance()

• DateFormat getDateTimeInstance()

– Paramétereik lehetnek a dátum stílus (rövid, hosszú, stb),

idő stílus (rövid, hosszú, stb.), Locale.

– Használata hasonló a NumberFormat osztályhoz.

Page 88: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/88

Nemzetköziség

Dátum, idő formázás

– A dátum, idő megjelenítésben használt szimbólumok (pl.

hónap nevek, nap nevek, stb.) a DateFormatSymbols

osztállyal kezelhetőek. Példa:

DateFormatSymbols dfs = new DateFormatSymbols();String[] napok = {"Vas", "He", "Kedd", "Szer", "Csüt", "Pént", "Szomb"}; dfs.setWeekDays(napok);

Page 89: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/89

Nemzetköziség

Szöveg formázás

– A megjelenős szövegeket sem célszerű összefűzéssel

előállítani.

– Ilyen összefűzéssel nem lehet megfelelően átfordítani más

nyelvekre. Van nyelv pl., ahol a szövegben máshol

helyezkedne el az adat.

– Használjuk a MessageFormat osztályt, amely lehetővé

teszi, hogy egyetlen String-ben megadjuk a szöveget és

az adatokat. Hasonló a printf-hez.

String s = "A kör kerülete: "+ker+", területe: "+ter;

Page 90: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/90

Nemzetköziség

Szöveg formázás: példák:

String s = MessageFormat.format("A kör kerülete: {0, number}, területe: {0, number}", ker, ter);

String c = MessageFormat.format("Most {1,date,long} és van {0,number} feladat.", 2.34, new Date());

Page 91: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/91

Példakód – Localeimport java.util.Date;import java.text.DateFormat;import java.text.NumberFormat;import java.util.Locale;public class Formats {

public static void main(String[] args) {Locale defLoc = Locale.getDefault();

Print(defLoc);Print(new Locale("us", "US"));Print(new Locale("fr", "FR"));

}public static void Print (Locale loc){

System.out.println("\nLocale params: "+loc.toString());System.out.println("Language: "+loc.getDisplayLanguage(loc));DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, loc);Date date = new Date();String formattedDate = df.format(date);System.out.println("Date format: "+formattedDate);double x = 1234567.5663;NumberFormat nf = NumberFormat.getInstance(loc);System.out.println("Number format: "+nf.format(x));

}}

Page 92: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/92

Nemzetköziség

Erőforrás kezelés

Erőforrások: Locale-függő szövegek, adatok

Kezelés:

1. Azonosítsuk a Locale-függő adatokat

2. Különítsük el a programtól, készítsünk belőlük minden

szükséges Locale-hoz. (ResourceBundle)

3. A programban betöltjük és használjuk az éppen

szükséges Locale-hoz tartozót. (ResourceBundle loading)

– A ResourceBundle absztrakt osztály, illetve ennek

leszármazottai használhatók az elkülönített erőforrások

tárolására.

Page 93: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/93

Nemzetköziség

Erőforrás kezelés

– A ResourceBundle osztálynak két leszármazottja van:

• PropertyResourceBundle: szöveges file-okban

(.properties) tárolja az adatokat. Csak szöveges

(szöveggé alakítható) adatok tárolására.

• ListResourceBundle: Osztályokban tárolja az

adatokat. Bármilyen típusúak lehetnek.

Page 94: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/94

Nemzetköziség

Erőforrás kezelés

– Az erőforrások betöltése:

• A ResourceBundle statikus getBundle() metódusával, amelynek kötelező megadni az

erőforráscsoport nevét és a locale-t. Ez megkeresi és

betölti a megfelelő erőforrás file-t (osztályt).

• Például:

Locale curLoc=new Locale("hu","HU","UNIX"); ResourceBundle a = ResourceBundle.getBundle("Feliratok", curLoc);

Page 95: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/95

Nemzetköziség

Erőforrás kezelés

– Keresési sor:

• Feliratok_hu_HU_UNIX, ha nincs

• Feliratok_hu_HU

• Feliratok_hu

• Feliratok_alapertnyelv_alapertorsz

• Feliratok_alapertnyelv

• Feliratok

• Ha egyik sincs, akkor MissingResourceException-t dob.

• A getBundle() először ilyen nevű osztályt keres, ha az

nincs, akkor ilyen nevű .properties kiterjesztésű file-t

keres.

Page 96: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/96

Nemzetköziség

Erőforrás kezelés

– Betöltött erőforrás használata:

• Adott kulcsú elem kinyerése:

– String getString(String kulcs)

– Object getObject(String kulcs)

• Kulcsok kinyerése:

– Set<String> keySet() …

– A .properties file szerkezete:

• kulcsnév érték

– Az erőforrás szerkezetének lekérése:

• public Object[][] getContents();

• ahol a tömb egy sora a kulcsot és az értéket

tartalmazza.

Page 97: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/97

Nemzetköziség

A fejlesztő eszközök (pl. eclipse, netbeans) képesek egy

osztályt átalakítani erőforrás kezelést használóra, de

csak a string-eket derítik fel és teszik ki erőforrás fileba.

(externalize strings)

Nem képesek szám, dátum stb. formázásokat

átalakítani.

Léteznek külön eszközök, amelyek igen!

Page 98: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/98

Példakód – ResourceBundle

import java.util.Locale;import java.util.ResourceBundle;

public class RBP {public static void main(String[] args) {

Locale loc = Locale.getDefault();ResourceBundle rb = ResourceBundle.getBundle("MyLabels");Print();

Locale.setDefault(new Locale("en", "US"));Print();Locale.setDefault(new Locale("fr", "FR"));Print();

}public static void Print () {

Locale loc = Locale.getDefault();ResourceBundle rb = ResourceBundle.getBundle("MyLabels");System.out.println("Say: how are you in "+loc.getCountry()+

" in "+loc.getDisplayLanguage(loc)+" language: "+rb.getString("how_are_you"));

}}

MyLabels_hu_HU.properties

how_are_you = Hogy vagy?

MyLabels_en_US.properties

how_are_you = How are you?

MyLabels_fr_FR.properties

how_are_you = Comment allez-vous?

Page 99: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/99

Példakód – Properties

import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Properties;

public class PropApp1 {public static void main(String[] args) {

Properties prop = new Properties();OutputStream output = null;try {

output = new FileOutputStream("config.properties");prop.setProperty("database", "localhost");prop.setProperty("dbuser", "BitMan");prop.setProperty("dbpassword", "*#>^<#*");prop.store(output, null);output.close();

} catch (IOException io) {io.printStackTrace();}}

} config.properties

#Sun Feb 04 16:36:48 CET 2018dbpassword=*\#>^<\#*database=localhostdbuser=BitMan

Page 100: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/100

Példakód – Properties

import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;

public class PropApp2 {public static void main(String[] args) {

Properties prop = new Properties();InputStream input = null;try {

input = new FileInputStream("config.properties");prop.load(input);

System.out.println(prop.getProperty("database"));System.out.println(prop.getProperty("dbuser"));System.out.println(prop.getProperty("dbpassword"));input.close();

} catch (IOException io) {io.printStackTrace();}}

}

Page 101: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/101

Teszt 18.

Locale loc = new Locale("hu");

Locale loc = new Locale("hu", "HU");

Locale loc = new Locale("HUNGARY");

Locale loc = Locale.HUNGARY;

Locale loc = new Locale("hu", "HU", "Win");

Locale loc = Locale.UK;

Locale loc = new Locale("xx", "XX");

Locale loc = Locale.getDefault();

Melyik Locale megadás helyes?

Page 102: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/102

Teszt 19.

Mi a tartalma egy .properties fájlnak?

name = "Joe"

number = 23

name = Joe

number = 23

"name" = "Joe"

"number" = "23"

name=Joe

number=23

"name" = Joe

"number" = 23

name="Joe"

number="23"

Page 103: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/103

Teszt 20.

Hogyan olvassuk ki egy ResourceBundle (erőforrás) tartalmát?

rb.getBundle("param");

rb.getParam("param");

rb.getProperties("param");

rb.getString("param");

rb.getObject("param");

rb.getResource("param");

rb.get("param");

Page 104: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/104Logolás – java.util.logging

Page 105: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/105

Logolás

Naplózás. Egy program a végrehajtása alatt üzeneteket ír egy

központi helyre (konzol, fájl).

Az üzenetek lehetnek:

– felhasználói tevékenységek (bejelentkezés, kijelentkezés…),

– normál tevékenységek üzenetei (folyamat indítása, adat

beírás…),

– figyelmeztetések (hibás adat beírása…),

– hibák (programhibák).

Az üzenetek felhasználhatók:

– statisztikák készítéséhez,

– tevékenységek analizálásához,

– hibák kereséséhez, hibajavításhoz.

Page 106: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/106

Logolás

Javaban a java.util.logging csomag biztosítja a logolást,

a Logger osztály használatával.

Logger létrehozása:

– name: a logger neve

– resourceBundleName: nemzetközi erőforrás kezelő neve

• Értéke lehet null

Logger(String name, String resourceBundleName)

Page 107: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/107

Logolás

Naplózási szint: az események 7 súlyossági kategóriába

sorolhatók:

SEVERE

WARNING

INFO

CONFIG

FINE

FINER

FINEST

Súlyos

Figyelmeztető

Információs

Beállítási

Jobb

Legjobb

-

+

Page 108: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/108

Logolás

A naplózási szint beállítása

– LOGGER.setLevel(szint);

– Azok az üzenetek naplózódnak, melyek legalább a

beállított szint súlyosságával rendelkeznek.

– A példában az információs, a figyelmeztető és a súlyos

szintű üzenetek naplózódnak.

LOGGER.setLevel(Level.INFO);

Page 109: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/109

Logolás

Naplózás:

– logger.xxx("Message");

– Az xxx metódus az egyes szintek nevével egyezik meg.

– Csak azok az üzenetek naplózódnak, amelyek legalább a

beállított szinttel rendelkeznek!

logger.setLevel(Level.INFO);

logger.severe("Info Log");logger.warning("Info Log");logger.info("Info Log");logger.finest("Really not important");

Page 110: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/110

Logolás

A loggerek több handlerhez (kezelőhöz) is kapcsolódhatnak.

A kezelő megkapja az üzenetet a naplózóból, és a beállított

cél felé továbbítja.

– ConsoleHandler: Az üzeneteket a konzolra írja ki

– FileHandler: Az üzeneteket fájlba írja ki

– Az INFO és a magasabb szintek automatikusan a konzolra

kerülnek, de ez kikapcsolható:

logger.setUseParentHandlers(false);

– A kezelő kikapcsolható a setLevel (Level.OFF) módszerrel, és

bekapcsolható a setLevel() metódussal.

A kezelők kimenete formázóval konfigurálható

Rendelkezésre álló formázók:

– SimpleFormatter: Minden üzenetet szövegként generál

– XMLFormatter: XML-kimenetet hoz létre a naplóüzenetekhez

Page 111: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/111

import java.util.logging.*;import java.io.*;public class LogPrb {

private static Logger logger = Logger.getLogger("LogPrb loger");private static FileHandler fh;

public static void main(String[] args) {makeFileLogger("C:/Java8/LogPrb.log");logger.setLevel(Level.INFO);logger.info("Logger Name: "+logger.getName());logger.warning("Hiba!");logger.info("Program OK!");logger.finest("Lényegtelen megjegyzés.");

}public static void makeFileLogger (String fnev) {try {

fh = new FileHandler(fnev); logger.addHandler(fh);logger.setUseParentHandlers(false);SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter);

} catch (SecurityException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}

}}

Példakód – Logger

Page 112: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/112

Példakód – Logger

Page 113: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/113

Logolás

Logger Handler

Formatter

ExternalSystem

FilterFilter

A java.util.logging csomag (részlete)

Page 114: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/114

Teszt 21.

Melyik csomagban van a Logger osztály?

java.util.logger

java.util.logging

java.util

java.util.logger.logging

Page 115: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/115

Teszt 22.

logger.info("data");

logger.warning("data");

logger.server("data");

logger.error("data");

logger.log("data");

logger.exception("data");

logger.finest("data");

Hogyan lehet írni egy megnyitott Logger fájlba?

Page 116: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/116

Teszt 23.

SimpleLogFormatter

SimpleTextFormatter

LogFileFormatter

XMLFormatter

SimpleFormatter

HTMLFormatter

Milyen formázók állnak rendelkezésre a logoláshoz?

Page 117: A svájci bicska - users.iit.uni-miskolc.huusers.iit.uni-miskolc.hu/~szucs/jprog/oa/17_EA_06_Util_TM.pdf · 117/4 B IT MAN Gyűjtemény keretrendszer A gyűjtemények -tárolók,

B IT MAN117/117

VÉGEVÉGE