1 / 53

Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot ja perustietorakenteet

? 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

misha
Télécharger la présentation

Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot ja perustietorakenteet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Jukka Harju, Jukka Juslin Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot 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

More Related