Tuloksellinen Javaohjelmointi Luku 9 Taulukot ja perustietorakenteet Jukka

  • Slides: 53
Download presentation
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet © Jukka Harju, Jukka Juslin

Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet © Jukka Harju, Jukka Juslin

Tuloksellinen Java-ohjelmointi Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. Lisäys

Tuloksellinen Java-ohjelmointi Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. Lisäys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Javaohjelmointi -kirjaa. © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Taulukko • Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. • Käsittelylistalla on:

Taulukko • Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. • Käsittelylistalla on: – – Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti Taulukot, jotka tallettavat olioviittauksia Vaihtuvamittaiset parametrilistat © Jukka Harju, Jukka Juslin

Taulukko • Taulukko on järjestetty lista arvoja Taulukolla on nimi (viittausmuuttujan nimi) 0 pisteet

Taulukko • Taulukko on järjestetty lista arvoja Taulukolla on nimi (viittausmuuttujan nimi) 0 pisteet Jokaisella arvolla on numeerinen indeksi 1 2 3 4 5 6 7 8 9 15 87 94 82 67 98 87 81 74 91 • Taulukko, jonka koko on N-solua indeksoidaan nollasta indeksiin N-1 asti. • Yo taulukko sisältää 10 solua, jotka on indeksoitu 0: sta 9: ään © Jukka Harju, Jukka Juslin

Taulukko • Tiettyyn arvoon taulukossa viitataan käyttämällä taulukon nimeä, jota seuraa indeksin numero hakasulkeissa.

Taulukko • Tiettyyn arvoon taulukossa viitataan käyttämällä 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 © Jukka Harju, Jukka Juslin

Taulukko • Taulukon soluun voidaan tallentaa arvo, solun sisältö voidaan tulostaa tai solua voidaan

Taulukko • Taulukon soluun voidaan tallentaa arvo, solun sisältö voidaan tulostaa tai solua voidaan käyttää laskutoimituksessa. pisteet[2] = 89; pisteet[eka] = pisteet[eka] + 2; keskiarvo = (pisteet[0] + pisteet[1])/2; System. out. println ("Huippu = " + pisteet[5]); © Jukka Harju, Jukka Juslin

Taulukko • Taulukon kaikkien solujen tietotyyppi on sama. • Solun tyyppi voi olla primitiivityyppi

Taulukko • Taulukon kaikkien solujen tietotyyppi on sama. • Solun tyyppi voi olla primitiivityyppi tai viittausmuuttuja. • Taulukko voidaan luoda sisältämään esimerkiksi inttyyppistä tietoa, merkkejä, merkkijonoja (viittauksia String -luokan olioihin), viittauksia Kolikko–luokan olioihin yms. • Javassa taulukko itse on olio. © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Taulukon luominen • pisteet-taulukko voidaan luoda seuraavasti: int[] pisteet = new int[10]; • Muuttujan

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 määrää taulukon kokoa, vaan jokaiselle taulukko-oliolle annetaan oma koko. • Viittausmuuttuja pisteet asetetaan osoittamaan uuteen taulukko-olioon, joka pystyy säilyttämään 10 inttyyppistä tietoa. © Jukka Harju, Jukka Juslin

Taulukon luominen • Muutamia muita esimerkkejä taulukon luonnista. float[] hinnat = new float[500]; boolean[]

Taulukon luominen • Muutamia muita esimerkkejä taulukon luonnista. float[] hinnat = new float[500]; boolean[] vivut; vivut = new boolean[20]; char[] merkit = new char[1750]; © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Taulukon käyttö • Java SE 5: n Iterator-luokka helpottaa taulukon elementtien läpikäyntiä: for (int

Taulukon käyttö • Java SE 5: n Iterator-luokka helpottaa taulukon elementtien läpikäyntiä: for (int piste : pisteet) { System. out. println(piste); } • Enimmäkseen käytetään kuitenkin for-toistorakennetta taulukon läpikäyntiin: for (int i = 0; i < pisteet. length; i++) { System. out. println(pisteet[i]); } © Jukka Harju, Jukka Juslin

Taulukon rajojen tarkistaminen • Kun taulukko on luotu, sillä on kiinnitetty koko, jota ei

Taulukon rajojen tarkistaminen • Kun taulukko on luotu, sillä on kiinnitetty koko, jota ei voida enää muuttaa. • Indeksin, jolla viitataan taulukon soluun, täytyy olla taulukon rajojen sisällä. • Toisin sanoen indeksin arvon pitää olla >= 0 ja <N (taulukon koko). • Java kääntäjä heittää Array. Index. Out. Of. Bounds. Exception-luokan poikkeuksen, jos indeksi on taulukon rajojen ulkopuolella. • Tätä kutsutaan automaattiseksi rajojen tarkistamiseksi. © Jukka Harju, Jukka Juslin

Taulukon rajojen tarkistaminen • Esimerkiksi taulukon merkit koko on 100, mutta indeksi laskuri saa

Taulukon rajojen tarkistaminen • Esimerkiksi taulukon merkit koko on 100, mutta indeksi laskuri saa liikkua vain välillä 0 -99. • Jos laskurin arvo on 100, silloin seuraava viittaus aiheuttaa poikkeuksen heittämisen: System. out. println(merkit[laskuri]); • On tyypillistä tehdä ns. off-by-one virheitä taulukkoja käytettäessä. ongelma for (int i=0; i <= 100; i++) { merkit[i] = i*50 + epsilon; } © Jukka Harju, Jukka Juslin

Taulukon rajojen tarkistaminen • Jokaisella taulukko-oliolla on julkinen vakioattribuutti nimeltään length, joka sisältää taulukon

Taulukon rajojen tarkistaminen • Jokaisella taulukko-oliolla on julkinen vakioattribuutti nimeltään length, joka sisältää taulukon koon. • Tähän viitataan taulukon nimen kautta käyttäen lengthattribuuttia, ei esim. get. Length-metodia: int pituus = pisteet. length; • Huomaa, että length sisältää solujen lukumäärän eikä suurinta sallittua indeksinumeroa. © Jukka Harju, Jukka Juslin

Toinen taulukon luontitapa • Hakasulkeet taulukon tyypissä voidaan kirjoittaa taulukon tietotyypin tai nimen jälkeen.

Toinen taulukon luontitapa • Hakasulkeet taulukon tyypissä voidaan kirjoittaa taulukon tietotyypin tai nimen jälkeen. • Seuraavat kaksi lausetta ovat merkitykseltään identtiset: float[] hinnat; float hinnat[]; • Ensimmäinen tapa on helpommin luettava ja suositeltava. © Jukka Harju, Jukka Juslin

Alustuslistat • Alustuslistaa voidaan käyttää arvojen sijoittamisessa taulukkoon sen luontivaiheessa. • Arvot kirjoitetaan aaltosulkeisiin

Alustuslistat • Alustuslistaa voidaan käyttää arvojen sijoittamisessa taulukkoon sen luontivaiheessa. • Arvot kirjoitetaan aaltosulkeisiin pilkulla erotettuina. • Esimerkkejä: int[] yksikot = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; char[] arvosanat = {'1', '2', '3', '4', '5'}; © Jukka Harju, Jukka Juslin

Alustuslistat • Huomaa, että kun käytetään alustuslistaa: – Ei käytetä new-operaattoria – Taulukon kokoa

Alustuslistat • Huomaa, että kun käytetään alustuslistaa: – Ei käytetä new-operaattoria – Taulukon kokoa ei määritellä • Taulukon koko määrittyy automaattisesti sen mukaan kuinka monta arvoa alustuslistassa on. • Alustuslistaa voidaan käyttää vain taulukon luonnin yhteydessä. © Jukka Harju, Jukka Juslin

Taulukko parametrina • Koko taulukko voidaan välittää parametrina metodille. • Kuten mikä tahansa muun

Taulukko parametrina • Koko taulukko voidaan välittää parametrina metodille. • Kuten mikä tahansa muun olion kanssa, viittaus taulukkoon (eli olioon) välitetään metodille. • Kun taulukkoa muutetaan metodin sisällä näkyvät muutokset myös kutsuneeseen metodiin. Taulukkoa ei siis ole tarpeen palauttaa metodista. • Myös yksittäinen taulukon solu voidaan välittää metodille, kunhan solun tyyppi vastaa metodin parametrimuuttujan tyyppiä. © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Oliotaulukko • Taulukon elementit voivat olla viittausmuuttujia. • Seuraava lause varaa tilaa viidelle viittausmuuttujalle,

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 String–olioita. • Taulukko sisältää null–alkuarvoja. • Olio, joka tallennetaan taulukkoon täytyy erikseen luoda. © Jukka Harju, Jukka Juslin

Oliotaulukko • sanat-taulukko alkuarvoisessa tilanteessa: sanat null null © Jukka Harju, Jukka Juslin

Oliotaulukko • sanat-taulukko alkuarvoisessa tilanteessa: sanat null null © Jukka Harju, Jukka Juslin

Oliotaulukko • Sen jälkeen kun muutamia String-olioita on luotu ja tallennettu taulukkoon: sanat "hauskuus"

Oliotaulukko • Sen jälkeen kun muutamia String-olioita on luotu ja tallennettu taulukkoon: sanat "hauskuus" "luonti" "nopeus" null © Jukka Harju, Jukka Juslin

Komentoriviargumentit • main-metodin määrittelystä havaitaan, että metodi saa parametrina String-tyyppisen taulukon. • Taulukon arvot

Komentoriviargumentit • main-metodin määrittelystä havaitaan, että metodi saa parametrina String-tyyppisen taulukon. • Taulukon arvot ovat peräisin komentoriviargumenteista, jotka annetaan ohjelmalle käynnistyksen yhteydessä. • Esimerkiksi seuraava komento välittää kaksi String oliota main-metodille: > java ohjelma uskomaton kiva • Nämä merkkijonot tallennetaan indeksien 0 ja 1 kohtiin main-metodin parametritaulukkoon. © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Wrapper-luokat • Wrapper-luokkia käytetään ”kietomaan” alkeistyyppinen tieto olion sisään (attribuutin arvoksi). • Tämä on

Wrapper-luokat • Wrapper-luokkia käytetään ”kietomaan” alkeistyyppinen tieto olion sisään (attribuutin arvoksi). • Tämä on tarpeen koska taulukkoa kehittyneemmät Javan tietorakenteet hyväksyvät arvoikseen vain olioita. • Java SE 5 toi uutena ns. ”autoboxing”-ominaisuuden, jolla Wrapper-luokkien käyttö on erittäin helppoa. • Jokaiselle primitiivityypille löytyy oma Wrapperluokkansa (ks. kirjan taulukko 9. 1). © Jukka Harju, Jukka Juslin

Wrapper-luokat • Seuraavassa esimerkki Wrapper-luokan käytöstä autoboxingilla. • Katso myös kirjan esimerkki 9. 5.

Wrapper-luokat • Seuraavassa esimerkki Wrapper-luokan käytöstä autoboxingilla. • Katso myös kirjan esimerkki 9. 5. © Jukka Harju, Jukka Juslin

Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class Wrapper.

Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class Wrapper. Esimerkki { Suora sijoitus riittää, public Double kiedo(double luku) { alkeistyyppi muuntuu olioksi. Double luku. Oliona = luku; return luku. Oliona; } public double palauta(Double luku. Oliona) { double luku = luku. Oliona; return luku; Suora sijoitus riittää, olio } muuntuu alkeistyypiksi. public static void main(String[] args) { Wrapper. Esimerkki muunnin = new Wrapper. Esimerkki(); double luku. Alkeistyyppisenä = 123. 45; Double luku. Oliona = muunnin. kiedo(luku. Alkeistyyppisenä); luku. Alkeistyyppisenä = muunnin. palauta(luku. Oliona); } } © Jukka Harju, Jukka Juslin

Wrapper-luokat • Ilman autoboxingia sama toiminta vaatisi seuraavan koodin. © Jukka Harju, Jukka Juslin

Wrapper-luokat • Ilman autoboxingia sama toiminta vaatisi seuraavan koodin. © Jukka Harju, Jukka Juslin

Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class Wrapper.

Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class Wrapper. Esimerkki { Pelkkä sijoitus ei riitä. public Double kiedo(double luku) { Double luku. Oliona = new Double(luku); return luku. Oliona; } public double palauta(Double luku. Oliona) { double luku = luku. Oliona. double. Value(); return luku; Pelkkä sijoitus ei riitä. } public static void main(String[] args) { Wrapper. Esimerkki muunnin = new Wrapper. Esimerkki(); double luku. Alkeistyyppisenä = 123. 45; Double luku. Oliona = muunnin. kiedo(luku. Alkeistyyppisenä); luku. Alkeistyyppisenä = muunnin. palauta(luku. Oliona); } } © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Linkitetyt listat • Linkitetty lista on dynaaminen tietorakenne. • Dynaamisen tietorakenteen kokoa voidaan muuntaa

Linkitetyt listat • Linkitetty lista on dynaaminen tietorakenne. • Dynaamisen tietorakenteen kokoa voidaan muuntaa myös luonnin jälkeen (vrt. taulukko). • Linkitetty lista on järjestetty joukko solmuja, joista jokainen sisältää tiedon lisäksi linkin seuraavaan solmuun. linkki tieto © Jukka Harju, Jukka Juslin linkki tieto

Linkitetyt listat • Tieto on viittausmuuttuja, eli viittaa olioon. linkki tieto OLIO © Jukka

Linkitetyt listat • Tieto on viittausmuuttuja, eli viittaa olioon. linkki tieto OLIO © Jukka Harju, Jukka Juslin linkki tieto OLIO

Linkitetyt listat • Linkitetystä listasta voidaan poistaa solmu, muuttamalla poistettavaan solmuun osoittavaa linkkiä ja

Linkitetyt listat • Linkitetystä listasta voidaan poistaa solmu, muuttamalla poistettavaan solmuun osoittavaa linkkiä ja poistettava solmun linkkiä. linkki tieto © Jukka Harju, Jukka Juslin

Linkitetyt listat • Linkitettyyn listaan voidaan lisätä solmu lisäämällä solmu sekä tarvittava linkki tieto

Linkitetyt listat • Linkitettyyn listaan voidaan lisätä solmu lisäämällä solmu sekä tarvittava linkki tieto © Jukka Harju, Jukka Juslin linkki tieto

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Array. List –luokka • Luokka Array. List sijaitsee pakkauksessa java. util. • Array. List

Array. List –luokka • Luokka Array. List sijaitsee pakkauksessa java. util. • Array. List on linkitetyn listan eräs toteutus. • Periytyy luokasta Abstract. List. • Voidaan määritellä hyväksymään minkä tahansa tyyppisiä viittausmuuttujia, ei kuitenkaan primitiivityyppisiä muuttujia. © Jukka Harju, Jukka Juslin

Array. List –luokka • Tyypittämättömän listan luonti: Array. List lista = new Array. List();

Array. List –luokka • Tyypittämättömän listan luonti: Array. List lista = new Array. List(); • Tyypittämätön lista hyväksyy mitä tahansa tyyppiä olevat viittausmuuttujat. • Tyypitetty lista hyväksyy vain listan tyypin mukaisia viittausmuuttujia, virheellisistä sijoitusyrityksistä saadaan ilmoitus jo kääntäjältä. Tyypitetyn listan luonti: Array. List<String> lista = new Array. List<String>(); • © Jukka Harju, Jukka Juslin

Array. List –luokka • Tärkeimpiä metodeja: – – – add (ylikuormitettu) clear contains get

Array. List –luokka • Tärkeimpiä metodeja: – – – add (ylikuormitettu) clear contains get is. Empty remove (ylikuormitettu) – size lisää elementin listaan tyhjentää listan tutkii löytyykö etsittävä elementti listasta palauttaa elementin halutusta positiosta tutkii onko lista tyhjä poistaa elementin halutusta positiosta tai halutun elementin palauttaa listan elementtien lukumäärän © Jukka Harju, Jukka Juslin

Iterator-rajapinta • Iteraattori on olio, jonka avulla voidaan läpikäydä kokoelma (esim. Array. List-olio). •

Iterator-rajapinta • Iteraattori on olio, jonka avulla voidaan läpikäydä kokoelma (esim. Array. List-olio). • Iteraattorille on käytettävissä metodit: – has. Next – next – remove palauttaa arvon true, mikäli kokoelmassa on vielä elementtejä jäljellä palauttaa kokoelman seuraavan elementin poistaa viimeksi palautetun elementin kokoelmasta • Array. List-luokan oliolle saadaan luotua iteraattori seuraavasti: Array. List lista = new Array. List(); Iterator iter = lista. iterator(); • Array. List-luokan iterator-metodi on peritty yliluokalta Abstract. List. © Jukka Harju, Jukka Juslin

Array. List & Iterator käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Array. List - ja Iterator-luokkia.

Array. List & Iterator käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Array. List - ja Iterator-luokkia. • Katso myös kirjan esimerkki 9. 6. © Jukka Harju, Jukka Juslin

Luokka sijaitsee pakkauksessa fi. tuloksellinenjava. array. List package fi. tuloksellinenjava. array. List ; import

Luokka sijaitsee pakkauksessa fi. tuloksellinenjava. array. List package fi. tuloksellinenjava. array. List ; import java. util. Array. List; import java. util. Iterator; /** * Array. List-luokan käyttöesimerkki * @author Jukka Harju */ Luokassa käytetään public class Array. List. Esimerkki { pakkauksessa java. util private Array. List lista; sijaitsevia luokkia /** * Oletusmuodostin */ public Array. List. Esimerkki() { lista = new Array. List(); } /** * Metodi tulostaa listan sisällön. */ public void tulosta. Lista() { if (lista. is. Empty()) { System. out. println("Tulostettava lista on tyhjä!"); } else { System. out. println("Tulostettavan listan sisältö: "); Iterator iter = lista. iterator(); while (iter. has. Next()) { System. out. print(iter. next () + " "); } System. out. println(); } © Jukka Harju, Jukka Juslin }

 /** * Metodi lisää listaan String-olion. * @param lisattava. Data Listan viimeiseksi elementiksi

/** * Metodi lisää listaan String-olion. * @param lisattava. Data Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String lisattava. Data) { lista. add(lisattava. Data); } /** * Metodi lisää listaan taulukko-olion. * @param lisattava. Data Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String[] lisattava. Data) { for (int i = 0; i < lisattava. Data. length; i++) { lista. add(lisattava. Data[i ]); } } /** * Metodi palauttaa listan ensimmäisen solmun sisällön. * @return Listan ensimmäisen solmun sisältämä olio. */ public Object hae. Ensimmainen() { return lista. get(0); } /** * Metodi palauttaa listan viimeisen solmun sisällön. * @return Listan viimeisen solmun sisältämä olio. */ public Object hae. Viimeinen() { return lista. get(lista. size()-1); © Jukka Harju, Jukka Juslin }

 /** * Metodi etsii ja tulostaa halutun olion sijainnin listalla. * @param etsittava

/** * Metodi etsii ja tulostaa halutun olion sijainnin listalla. * @param etsittava Listasta etsittävä olio. */ public void etsi(Object etsittava) { int indeksi = lista. index. Of(etsittava); if (indeksi >= 0) { System. out. println( "Etsimäsi solmu " + etsittava + " sijaitsee listan positiossa " + indeksi + ". "); } else { System. out. println( "Lista ei sisällä etsimääsi solmua " + etsittava + ". "); } } /** * Metodi poistaa listasta olion. * @param poistettava Listasta poistettava olio. */ public void poista(Object poistettava) { lista. remove(poistettava ); } } © Jukka Harju, Jukka Juslin

package fi. tuloksellinenjava. array. List ; public class Array. List. Testi { public static

package fi. tuloksellinenjava. array. List ; public class Array. List. Testi { public static void main(String[] args) { Array. List. Testi testaaja = new Array. List. Testi(); testaaja. testaa(); } /** * Metodi sisältää varsinaisen testikoodin. */ public void testaa() { // luodaan uusi lista ja tulostetaan sen sisältö Array. List. Esimerkki esim = new Array. List. Esimerkki(); esim. tulosta. Lista(); // lisätään listaan yksittäinen solmu esim. lisaa("Seppo"); esim. tulosta. Lista(); //lisätään listaan taulukon tiedot (2 solmua) String[] taulukko = {"Matti", "Teppo"}; esim. lisaa(taulukko); esim. tulosta. Lista(); //tulostetaan ensimmäisen solmun sisältö System. out. println("n. Ensimmäinen solmu: "+esim. hae. Ensimmainen()); //tulostetaan viimeisen solmun sisältö System. out. println("n. Viimeinen solmu: "+esim. hae. Viimeinen()); //etsitään solmuja esim. etsi("Jaakko"); esim. etsi("Seppo"); esim. poista("Seppo"); System. out. println("Poistettiin solmu 'Seppo'"); esim. etsi("Seppo"); } } © Jukka Harju, Jukka Juslin

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array.

Missä ollaan? Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat Array. List-luokka Iterator-rajapinta Hash. Map-luokka Properties-luokka © Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi

Hash. Map –luokka • Luokka Hash. Map sijaitsee pakkauksessa java. util. • Hash. Map

Hash. Map –luokka • Luokka Hash. Map sijaitsee pakkauksessa java. util. • Hash. Map on hajautettu tietorakenne, johon voidaan viedä avain-arvo -pareja. • Hash. Mapista pystytään hakemaan tehokkaasti avainta vastaava arvo. • Voidaan määritellä hyväksymään minkä tahansa tyyppisiä viittausmuuttujia, ei kuitenkaan primitiivityyppisiä muuttujia. © Jukka Harju, Jukka Juslin

Hash. Map –luokka • • Tyypittämättömän Hash. Mapin luonti: Hash. Map tiedot = new

Hash. Map –luokka • • Tyypittämättömän Hash. Mapin luonti: Hash. Map tiedot = new Hash. Map(); Tyypittämätön Hash. Map hyväksyy mitä tahansa tyyppiä olevat viittausmuuttujat. Tyypitetty Hash. Map hyväksyy vain Hash. Mapin tyypin mukaisia viittausmuuttujia, virheellisistä sijoitusyrityksistä saadaan ilmoitus jo kääntäjältä. Tyypitetyn Hash. Mapin luonti: Hash. Map<String, String> tiedot = new Hash. Map<String, String>(); © Jukka Harju, Jukka Juslin

Hash. Map –luokka • Tärkeimpiä metodeja: – clear – contains. Key – contains. Value

Hash. Map –luokka • Tärkeimpiä metodeja: – clear – contains. Key – contains. Value – get – is. Empty – put – remove – size tyhjentää Hash. Mapin tutkii löytyykö etsittävä avain Hash. Mapista. tutkii löytyykö etsittävä arvo Hash. Mapista palauttaa haettavaa avainta vastaavan arvon tutkii onko Hash. Map tyhjä vie Hash. Mapiin annetun avainmen ja arvon poistaa annetun avaimen mukaisen avain-arvo –parin Hash. Mapista palauttaa Hash. Mapin avain-arvo -parien lukumäärän © Jukka Harju, Jukka Juslin

Hash. Mapin käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Hash. Mapluokkaa. • Katso myös kirjan esimerkki

Hash. Mapin käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Hash. Mapluokkaa. • Katso myös kirjan esimerkki 9. 8. © Jukka Harju, Jukka Juslin

Hash. Mapin käyttöesimerkki package tietorakenteet; import java. util. Hash. Map; /** * Hash. Map-luokan

Hash. Mapin käyttöesimerkki package tietorakenteet; import java. util. Hash. Map; /** * Hash. Map-luokan käyttöesimerkki. * @author Jukka Harju */ public class Hash. Map. Esimerkki { private Hash. Map<String, String> tiedot; /** * Oletusmuodostin, joka luo attribuuttina * olevan Hash. Mapin ja vie sinne sisältöä. */ public Hash. Map. Esimerkki() { //luodaaan tyhjä Hash. Map tiedot = new Hash. Map<String, String>(); //viedään Hash. Mapiin avain-arvo -pareja tiedot. put("hakemisto", "C: /temp"); tiedot. put("lokitiedosto", "Hash. Map. Esimerkki. log"); tiedot. put("käyttäjä", "admin"); } © Jukka Harju, Jukka Juslin

Hash. Mapin käyttöesimerkki /** * Hakee Hash. Mapista avainta vastaavan arvon. * @param avain

Hash. Mapin käyttöesimerkki /** * Hakee Hash. Mapista avainta vastaavan arvon. * @param avain Haettava avain. * @return arvo Löydetty arvo. */ public String hae. Arvo(String avain) { String arvo = tiedot. get(avain); return arvo; } public Hash. Map<String, String> get. Tiedot() { return tiedot; } public static void main(String[] args) { Hash. Map. Esimerkki hajauttaja = new Hash. Map. Esimerkki(); Hash. Map<String, String> tiedot = hajauttaja. get. Tiedot(); String arvo = tiedot. get("lokitiedosto"); System. out. println("Avainta lokitiedosto vastasi arvo " + arvo + ". "); } } © Jukka Harju, Jukka Juslin