530 likes | 1.12k Vues
? Jukka Harju, Jukka Juslin. N?m? kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssill?. Lis?ys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla k?ytet??n kurssikirjana Tuloksellinen Java-ohjelmointi ? tai Java ohjelmointi opas
E N D
1. Jukka Harju, Jukka Juslin Java-ohjelmointiopas ammattimaiseen osaamiseenLuku 11Taulukot ja perustietorakenteet
2. Jukka Harju, Jukka Juslin Nm kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssill. Lisys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla kytetn kurssikirjana Tuloksellinen Java-ohjelmointi tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa.
3. Jukka Harju, Jukka Juslin Miss ollaan?
4. Jukka Harju, Jukka Juslin Taulukot ovat olioita, jotka auttavat organisoimaan suuria mri tietoa.
Ksittelylistalla on:
Taulukon tekeminen ja kytt
Rajojen tarkastus ja kapasiteetti
Taulukot, jotka tallettavat olioviittauksia
Vaihtuvamittaiset parametrilistat Taulukko
5. Jukka Harju, Jukka Juslin Taulukko Taulukko on jrjestetty lista arvoja
6. Jukka Harju, Jukka Juslin Tiettyyn arvoon taulukossa viitataan kyttmll taulukon nime, jota seuraa indeksin numero hakasulkeissa.
Esimerkiksi:
pisteet[2]
viittaa arvoon 94 (kolmas arvo taulukossa).
Indeksi viittaa soluun, johon tallennetaan esimerkin taulukossa yksi int-tyyppinen arvo
Taulukko
7. Jukka Harju, Jukka Juslin Taulukon soluun voidaan tallentaa arvo, solun sislt voidaan tulostaa tai solua voidaan kytt laskutoimituksessa.
pisteet[2] = 89;
pisteet[eka] = pisteet[eka] + 2;
keskiarvo = (pisteet[0] + pisteet[1])/2;
System.out.println ("Huippu = " + pisteet[5]); Taulukko
8. Jukka Harju, Jukka Juslin Taulukon kaikkien solujen tietotyyppi on sama.
Solun tyyppi voi olla primitiivityyppi tai viittausmuuttuja.
Taulukko voidaan luoda sisltmn esimerkiksi int-tyyppist tietoa, merkkej, merkkijonoja (viittauksia String -luokan olioihin), viittauksia Kolikkoluokan olioihin yms.
Javassa taulukko itse on olio. Taulukko
9. Jukka Harju, Jukka Juslin Miss ollaan?
10. Jukka Harju, Jukka Juslin Taulukon luominen pisteet-taulukko voidaan luoda seuraavasti:
int[] pisteet = new int[10];
Muuttujan pisteet tyyppi on int[] (solun tyyppi on int, []-merkit kertovat kyseess olevan taulukon).
Huomaa, ett taulukon tyyppi ei mr taulukon kokoa, vaan jokaiselle taulukko-oliolle annetaan oma koko.
Viittausmuuttuja pisteet asetetaan osoittamaan uuteen taulukko-olioon, joka pystyy silyttmn 10 int-tyyppist tietoa.
11. Jukka Harju, Jukka Juslin Muutamia muita esimerkkej taulukon luonnista.
float[] hinnat = new float[500];
boolean[] vivut;
vivut = new boolean[20];
char[] merkit = new char[1750]; Taulukon luominen
12. Jukka Harju, Jukka Juslin Miss ollaan?
13. Jukka Harju, Jukka Juslin Taulukon kytt Java SE 5:n Iterator-luokka helpottaa taulukon elementtien lpikynti:
14. Jukka Harju, Jukka Juslin Taulukon rajojen tarkistaminen Kun taulukko on luotu, sill on kiinnitetty koko, jota ei voida en muuttaa.
Indeksin, jolla viitataan taulukon soluun, tytyy olla taulukon rajojen sisll.
Toisin sanoen indeksin arvon pit olla >= 0 ja <N (taulukon koko).
Java kntj heitt ArrayIndexOutOfBoundsException-luokan poikkeuksen, jos indeksi on taulukon rajojen ulkopuolella.
Tt kutsutaan automaattiseksi rajojen tarkistamiseksi.
15. Jukka Harju, Jukka Juslin Esimerkiksi taulukon merkit koko on 100, mutta indeksi laskuri saa liikkua vain vlill 0-99.
Jos laskurin arvo on 100, silloin seuraava viittaus aiheuttaa poikkeuksen heittmisen:
System.out.println(merkit[laskuri]);
On tyypillist tehd ns. off-by-one virheit taulukkoja kytettess. Taulukon rajojen tarkistaminen
16. Jukka Harju, Jukka Juslin Jokaisella taulukko-oliolla on julkinen vakioattribuutti nimeltn length, joka sislt taulukon koon.
Thn viitataan taulukon nimen kautta kytten length-attribuuttia, ei esim. getLength-metodia:
int pituus = pisteet.length;
Huomaa, ett length sislt solujen lukumrn eik suurinta sallittua indeksinumeroa. Taulukon rajojen tarkistaminen
17. Jukka Harju, Jukka Juslin Toinen taulukon luontitapa Hakasulkeet taulukon tyypiss voidaan kirjoittaa taulukon tietotyypin tai nimen jlkeen.
Seuraavat kaksi lausetta ovat merkitykseltn identtiset:
float[] hinnat;
float hinnat[];
Ensimminen tapa on helpommin luettava ja suositeltava.
18. Jukka Harju, Jukka Juslin Alustuslistat Alustuslistaa voidaan kytt arvojen sijoittamisessa taulukkoon sen luontivaiheessa.
Arvot kirjoitetaan aaltosulkeisiin pilkulla erotettuina.
Esimerkkej:
19. Jukka Harju, Jukka Juslin Huomaa, ett kun kytetn alustuslistaa:
Ei kytet new-operaattoria
Taulukon kokoa ei mritell
Taulukon koko mrittyy automaattisesti sen mukaan kuinka monta arvoa alustuslistassa on.
Alustuslistaa voidaan kytt vain taulukon luonnin yhteydess. Alustuslistat
20. Jukka Harju, Jukka Juslin Taulukko parametrina Koko taulukko voidaan vlitt parametrina metodille.
Kuten mik tahansa muun olion kanssa, viittaus taulukkoon (eli olioon) vlitetn metodille.
Kun taulukkoa muutetaan metodin sisll nkyvt muutokset mys kutsuneeseen metodiin. Taulukkoa ei siis ole tarpeen palauttaa metodista.
Mys yksittinen taulukon solu voidaan vlitt metodille, kunhan solun tyyppi vastaa metodin parametrimuuttujan tyyppi.
21. Jukka Harju, Jukka Juslin Miss ollaan?
22. Jukka Harju, Jukka Juslin Oliotaulukko Taulukon elementit voivat olla viittausmuuttujia.
Seuraava lause varaa tilaa viidelle viittausmuuttujalle, jotka viittaavat String-luokan olioihin:
String[] sanat = new String[5];
Yo lause ei luo Stringolioita.
Taulukko sislt nullalkuarvoja.
Olio, joka tallennetaan taulukkoon tytyy erikseen luoda.
23. Jukka Harju, Jukka Juslin sanat-taulukko alkuarvoisessa tilanteessa: Oliotaulukko
24. Jukka Harju, Jukka Juslin Sen jlkeen kun muutamia String-olioita on luotu ja tallennettu taulukkoon: Oliotaulukko
25. Jukka Harju, Jukka Juslin Komentoriviargumentit main-metodin mrittelyst havaitaan, ett metodi saa parametrina String-tyyppisen taulukon.
Taulukon arvot ovat perisin komentoriviargumenteista, jotka annetaan ohjelmalle kynnistyksen yhteydess.
Esimerkiksi seuraava komento vlitt kaksi String -oliota main-metodille:
> java ohjelma uskomaton kiva
Nm merkkijonot tallennetaan indeksien 0 ja 1 kohtiin main-metodin parametritaulukkoon.
26. Jukka Harju, Jukka Juslin Miss ollaan?
27. Jukka Harju, Jukka Juslin Wrapper-luokat Wrapper-luokkia kytetn kietomaan alkeistyyppinen tieto olion sisn (attribuutin arvoksi).
Tm on tarpeen koska taulukkoa kehittyneemmt Javan tietorakenteet hyvksyvt arvoikseen vain olioita.
Java SE 5 toi uutena ns. autoboxing-ominaisuuden, jolla Wrapper-luokkien kytt on erittin helppoa.
Jokaiselle primitiivityypille lytyy oma Wrapper-luokkansa (ks. kirjan taulukko 9.1).
28. Jukka Harju, Jukka Juslin Wrapper-luokat Seuraavassa esimerkki Wrapper-luokan kytst autoboxingilla.
Katso mys kirjan esimerkki 9.5.
29. Jukka Harju, Jukka Juslin Wrapper-luokat
30. Jukka Harju, Jukka Juslin Wrapper-luokat Ilman autoboxingia sama toiminta vaatisi seuraavan koodin.
31. Jukka Harju, Jukka Juslin Wrapper-luokat
32. Jukka Harju, Jukka Juslin Miss ollaan?
33. Jukka Harju, Jukka Juslin Linkitetyt listat Linkitetty lista on dynaaminen tietorakenne.
Dynaamisen tietorakenteen kokoa voidaan muuntaa mys luonnin jlkeen (vrt. taulukko).
Linkitetty lista on jrjestetty joukko solmuja, joista jokainen sislt tiedon lisksi linkin seuraavaan solmuun.
34. Jukka Harju, Jukka Juslin Linkitetyt listat Tieto on viittausmuuttuja, eli viittaa olioon.
35. Jukka Harju, Jukka Juslin Linkitetyt listat Linkitetyst listasta voidaan poistaa solmu, muuttamalla poistettavaan solmuun osoittavaa linkki ja poistettava solmun linkki.
36. Jukka Harju, Jukka Juslin Linkitetyt listat Linkitettyyn listaan voidaan list solmu lismll solmu sek tarvittava linkki.
37. Jukka Harju, Jukka Juslin Miss ollaan?
38. Jukka Harju, Jukka Juslin ArrayList luokka Luokka ArrayList sijaitsee pakkauksessa java.util.
ArrayList on linkitetyn listan ers toteutus.
Periytyy luokasta AbstractList.
Voidaan mritell hyvksymn mink tahansa tyyppisi viittausmuuttujia, ei kuitenkaan primitiivityyppisi muuttujia.
39. Jukka Harju, Jukka Juslin ArrayList luokka Tyypittmttmn listan luonti:
ArrayList lista = new ArrayList();
Tyypittmtn lista hyvksyy mit tahansa tyyppi olevat viittausmuuttujat.
Tyypitetty lista hyvksyy vain listan tyypin mukaisia viittausmuuttujia, virheellisist sijoitusyrityksist saadaan ilmoitus jo kntjlt.
Tyypitetyn listan luonti:
ArrayList<String> lista = new ArrayList<String>();
40. Jukka Harju, Jukka Juslin ArrayList luokka Trkeimpi metodeja:
add (ylikuormitettu) lis elementin listaan
clear tyhjent listan
contains tutkii lytyyk etsittv elementti listasta
get palauttaa elementin halutusta positiosta
isEmpty tutkii onko lista tyhj
remove (ylikuormitettu) poistaa elementin halutusta positiosta tai halutun elementin
size palauttaa listan elementtien lukumrn
41. Jukka Harju, Jukka Juslin Iterator-rajapinta Iteraattori on olio, jonka avulla voidaan lpikyd kokoelma (esim. ArrayList-olio).
Iteraattorille on kytettviss metodit:
hasNext palauttaa arvon true, mikli kokoelmassa on viel elementtej jljell
next palauttaa kokoelman seuraavan elementin
remove poistaa viimeksi palautetun elementin kokoelmasta
ArrayList-luokan oliolle saadaan luotua iteraattori seuraavasti:
ArrayList lista = new ArrayList();
Iterator iter = lista.iterator();
ArrayList-luokan iterator-metodi on peritty yliluokalta AbstractList.
42. Jukka Harju, Jukka Juslin ArrayList & Iterator kyttesimerkki Seuraava esimerkkiohjelma kytt ArrayList- ja Iterator-luokkia.
Katso mys kirjan esimerkki 9.6.
43. Jukka Harju, Jukka Juslin
44. Jukka Harju, Jukka Juslin
45. Jukka Harju, Jukka Juslin
46. Jukka Harju, Jukka Juslin
47. Jukka Harju, Jukka Juslin Miss ollaan?
48. Jukka Harju, Jukka Juslin HashMap luokka Luokka HashMap sijaitsee pakkauksessa java.util.
HashMap on hajautettu tietorakenne, johon voidaan vied avain-arvo -pareja.
HashMapista pystytn hakemaan tehokkaasti avainta vastaava arvo.
Voidaan mritell hyvksymn mink tahansa tyyppisi viittausmuuttujia, ei kuitenkaan primitiivityyppisi muuttujia.
49. Jukka Harju, Jukka Juslin HashMap luokka Tyypittmttmn HashMapin luonti:
HashMap tiedot = new HashMap();
Tyypittmtn HashMap hyvksyy mit tahansa tyyppi olevat viittausmuuttujat.
Tyypitetty HashMap hyvksyy vain HashMapin tyypin mukaisia viittausmuuttujia, virheellisist sijoitusyrityksist saadaan ilmoitus jo kntjlt.
Tyypitetyn HashMapin luonti:
HashMap<String, String> tiedot = new HashMap<String, String>();
50. Jukka Harju, Jukka Juslin HashMap luokka Trkeimpi metodeja:
clear tyhjent HashMapin
containsKey tutkii lytyyk etsittv avain HashMapista.
containsValue tutkii lytyyk etsittv arvo HashMapista
get palauttaa haettavaa avainta vastaavan arvon
isEmpty tutkii onko HashMap tyhj
put vie HashMapiin annetun avainmen ja arvon
remove poistaa annetun avaimen mukaisen avain-arvo parin HashMapista
size palauttaa HashMapin avain-arvo -parien lukumrn
51. Jukka Harju, Jukka Juslin HashMapin kyttesimerkki Seuraava esimerkkiohjelma kytt HashMap-luokkaa.
Katso mys kirjan esimerkki 9.8.
52. Jukka Harju, Jukka Juslin HashMapin kyttesimerkki
53. Jukka Harju, Jukka Juslin HashMapin kyttesimerkki