Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Tuloksellinen Java-ohjelmointi 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 -kirjaa. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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 0 1 2 3 4 5 6 7 8 9 pisteet Taulukolla on nimi (viittausmuuttujan nimi) Jokaisella arvolla on numeerinen indeksi 0 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
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin Taulukko Taulukon kaikkien solujen tietotyyppi on sama. Solun tyyppi voi olla primitiivityyppi tai viittausmuuttuja. Taulukko voidaan luoda sisältämään esimerkiksi int- tyyppistä tietoa, merkkejä, merkkijonoja (viittauksia String -luokan olioihin), viittauksia Kolikko–luokan olioihin yms. Javassa taulukko itse on olio. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
int[] pisteet = new int[10]; 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 int-tyyppistä tietoa. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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 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ää ArrayIndexOutOfBoundsException-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 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 koon. Tähän viitataan taulukon nimen kautta käyttäen length- attribuuttia, ei esim. getLength-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. Seuraavat kaksi lausetta ovat merkitykseltään identtiset: float[] hinnat; float hinnat[]; Ensimmäinen tapa on helpommin luettava ja suositeltava. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin 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
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
String[] sanat = new String[5]; 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
© Jukka Harju, Jukka Juslin Oliotaulukko sanat-taulukko alkuarvoisessa tilanteessa: sanat null © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Oliotaulukko Sen jälkeen kun muutamia String-olioita on luotu ja tallennettu taulukkoon: "hauskuus" sanat null "luonti" "nopeus" © Jukka Harju, Jukka Juslin
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
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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 Wrapper- luokkansa (ks. kirjan taulukko 9.1). © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Wrapper-luokat Seuraavassa esimerkki Wrapper-luokan käytöstä autoboxingilla. Katso myös kirjan esimerkki 9.5. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class WrapperEsimerkki { public Double kiedo(double luku) { Double lukuOliona = luku; return lukuOliona; } public double palauta(Double lukuOliona) { double luku = lukuOliona; return luku; } public static void main(String[] args) { WrapperEsimerkki muunnin = new WrapperEsimerkki(); double lukuAlkeistyyppisenä = 123.45; Double lukuOliona = muunnin.kiedo(lukuAlkeistyyppisenä); lukuAlkeistyyppisenä = muunnin.palauta(lukuOliona); } } Suora sijoitus riittää, alkeistyyppi muuntuu olioksi. Suora sijoitus riittää, olio muuntuu alkeistyypiksi. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Wrapper-luokat Ilman autoboxingia sama toiminta vaatisi seuraavan koodin. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Wrapper-luokat /** * Double-luokan käyttöesimerkki autoboxingilla. * @author Jukka Harju */ public class WrapperEsimerkki { public Double kiedo(double luku) { Double lukuOliona = new Double(luku); return lukuOliona; } public double palauta(Double lukuOliona) { double luku = lukuOliona.doubleValue(); return luku; } public static void main(String[] args) { WrapperEsimerkki muunnin = new WrapperEsimerkki(); double lukuAlkeistyyppisenä = 123.45; Double lukuOliona = muunnin.kiedo(lukuAlkeistyyppisenä); lukuAlkeistyyppisenä = muunnin.palauta(lukuOliona); } } Pelkkä sijoitus ei riitä. Pelkkä sijoitus ei riitä. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin 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 linkki tieto linkki tieto linkki tieto © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Linkitetyt listat Tieto on viittausmuuttuja, eli viittaa olioon. linkki tieto linkki tieto linkki tieto linkki tieto OLIO OLIO OLIO OLIO © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Linkitetyt listat Linkitetystä listasta voidaan poistaa solmu, muuttamalla poistettavaan solmuun osoittavaa linkkiä ja poistettava solmun linkkiä. linkki tieto linkki tieto linkki tieto linkki tieto © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Linkitetyt listat Linkitettyyn listaan voidaan lisätä solmu lisäämällä solmu sekä tarvittava linkki. linkki tieto linkki tieto linkki tieto linkki tieto linkki tieto © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin ArrayList –luokka Luokka ArrayList sijaitsee pakkauksessa java.util. ArrayList on linkitetyn listan eräs toteutus. Periytyy luokasta AbstractList. Voidaan määritellä hyväksymään minkä tahansa tyyppisiä viittausmuuttujia, ei kuitenkaan primitiivityyppisiä muuttujia. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin ArrayList –luokka Tyypittämättömän listan luonti: ArrayList lista = new ArrayList(); 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: ArrayList<String> lista = new ArrayList<String>(); © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin ArrayList –luokka Tärkeimpiä metodeja: add (ylikuormitettu) lisää elementin listaan clear tyhjentää listan contains tutkii löytyykö etsittävä 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 lukumäärän © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Iterator-rajapinta Iteraattori on olio, jonka avulla voidaan läpikäydä kokoelma (esim. ArrayList-olio). Iteraattorille on käytettävissä metodit: hasNext palauttaa arvon true, mikäli kokoelmassa on vielä elementtejä jäljellä 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. © Jukka Harju, Jukka Juslin
ArrayList & Iterator käyttöesimerkki Seuraava esimerkkiohjelma käyttää ArrayList- ja Iterator-luokkia. Katso myös kirjan esimerkki 9.6. © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin Luokka sijaitsee pakkauksessa fi.tuloksellinenjava.arrayList package fi.tuloksellinenjava.arrayList; import java.util.ArrayList; import java.util.Iterator; /** * ArrayList-luokan käyttöesimerkki * @author Jukka Harju */ public class ArrayListEsimerkki { private ArrayList lista; /** * Oletusmuodostin */ public ArrayListEsimerkki() { lista = new ArrayList(); } /** * Metodi tulostaa listan sisällön. */ public void tulostaLista() { if (lista.isEmpty()) { System.out.println("Tulostettava lista on tyhjä!"); } else { System.out.println("Tulostettavan listan sisältö:"); Iterator iter = lista.iterator(); while (iter.hasNext()) { System.out.print(iter.next() + " "); } System.out.println(); } } Luokassa käytetään pakkauksessa java.util sijaitsevia luokkia © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin /** * Metodi lisää listaan String-olion. * @param lisattavaData Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String lisattavaData) { lista.add(lisattavaData); } /** * Metodi lisää listaan taulukko-olion. * @param lisattavaData Listan viimeiseksi elementiksi lisättävä olio. */ public void lisaa(String[] lisattavaData) { for (int i = 0; i < lisattavaData.length; i++) { lista.add(lisattavaData[i]); } } /** * Metodi palauttaa listan ensimmäisen solmun sisällön. * @return Listan ensimmäisen solmun sisältämä olio. */ public Object haeEnsimmainen() { return lista.get(0); } /** * Metodi palauttaa listan viimeisen solmun sisällön. * @return Listan viimeisen solmun sisältämä olio. */ public Object haeViimeinen() { return lista.get(lista.size()-1); } © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin /** * Metodi etsii ja tulostaa halutun olion sijainnin listalla. * @param etsittava Listasta etsittävä olio. */ public void etsi(Object etsittava) { int indeksi = lista.indexOf(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
© Jukka Harju, Jukka Juslin package fi.tuloksellinenjava.arrayList; public class ArrayListTesti { public static void main(String[] args) { ArrayListTesti testaaja = new ArrayListTesti(); testaaja.testaa(); } /** * Metodi sisältää varsinaisen testikoodin. */ public void testaa() { // luodaan uusi lista ja tulostetaan sen sisältö ArrayListEsimerkki esim = new ArrayListEsimerkki(); esim.tulostaLista(); // lisätään listaan yksittäinen solmu esim.lisaa("Seppo"); esim.tulostaLista(); //lisätään listaan taulukon tiedot (2 solmua) String[] taulukko = {"Matti", "Teppo"}; esim.lisaa(taulukko); esim.tulostaLista(); //tulostetaan ensimmäisen solmun sisältö System.out.println("\nEnsimmäinen solmu:"+esim.haeEnsimmainen()); //tulostetaan viimeisen solmun sisältö System.out.println("\nViimeinen solmu:"+esim.haeViimeinen()); //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
© Jukka Harju, Jukka Juslin Missä ollaan? Tuloksellinen Java-ohjelmointi Taulukko Taulukon luominen Taulukon käyttö Taulukon järjestäminen Oliotaulukko Wrapper-luokat Linkitetyt listat ArrayList-luokka Iterator-rajapinta HashMap-luokka Properties-luokka © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin HashMap –luokka Luokka HashMap sijaitsee pakkauksessa java.util. HashMap on hajautettu tietorakenne, johon voidaan viedä avain-arvo -pareja. HashMapista 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
© Jukka Harju, Jukka Juslin HashMap –luokka Tyypittämättömän HashMapin luonti: HashMap tiedot = new HashMap(); Tyypittämätön HashMap hyväksyy mitä tahansa tyyppiä olevat viittausmuuttujat. Tyypitetty HashMap hyväksyy vain HashMapin tyypin mukaisia viittausmuuttujia, virheellisistä sijoitusyrityksistä saadaan ilmoitus jo kääntäjältä. Tyypitetyn HashMapin luonti: HashMap<String, String> tiedot = new HashMap<String, String>(); © Jukka Harju, Jukka Juslin
© Jukka Harju, Jukka Juslin HashMap –luokka Tärkeimpiä metodeja: clear tyhjentää HashMapin containsKey tutkii löytyykö etsittävä avain HashMapista. containsValue tutkii löytyykö etsittävä 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 lukumäärän © Jukka Harju, Jukka Juslin
HashMapin käyttöesimerkki Seuraava esimerkkiohjelma käyttää HashMap-luokkaa. Katso myös kirjan esimerkki 9.8. © Jukka Harju, Jukka Juslin
HashMapin käyttöesimerkki package tietorakenteet; import java.util.HashMap; /** * HashMap-luokan käyttöesimerkki. * @author Jukka Harju */ public class HashMapEsimerkki { private HashMap<String, String> tiedot; /** * Oletusmuodostin, joka luo attribuuttina * olevan HashMapin ja vie sinne sisältöä. */ public HashMapEsimerkki() { //luodaaan tyhjä HashMap tiedot = new HashMap<String, String>(); //viedään HashMapiin avain-arvo -pareja tiedot.put("hakemisto", "C:/temp"); tiedot.put("lokitiedosto", "HashMapEsimerkki.log"); tiedot.put("käyttäjä", "admin"); } © Jukka Harju, Jukka Juslin
HashMapin käyttöesimerkki /** * Hakee HashMapista avainta vastaavan arvon. * @param avain Haettava avain. * @return arvo Löydetty arvo. */ public String haeArvo(String avain) { String arvo = tiedot.get(avain); return arvo; } public HashMap<String, String> getTiedot() { return tiedot; } public static void main(String[] args) { HashMapEsimerkki hajauttaja = new HashMapEsimerkki(); HashMap<String, String> tiedot = hajauttaja.getTiedot(); String arvo = tiedot.get("lokitiedosto"); System.out.println("Avainta lokitiedosto vastasi arvo " + arvo + "."); } } © Jukka Harju, Jukka Juslin