Javaohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot ja

  • Slides: 53
Download presentation
Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot ja perustietorakenteet

Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 11 Taulukot ja perustietorakenteet

Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. Lisäys edelliseen lisenssiin:

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 Java-ohjelmointi – tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa.

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

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

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

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

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]);

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.

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

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 int-tyyppistä tietoa.

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];

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

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 fortoistorakennetta taulukon läpikäyntiin: for (int i = 0; i < pisteet. length; i++) { System. out. println(pisteet[i]); }

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.

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; }

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 length-attribuuttia, ei esim. get. Length-metodia: int pituus = pisteet. length; • Huomaa, että length sisältää solujen lukumäärän eikä suurinta sallittua indeksinumeroa.

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.

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'};

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ä.

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ä.

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

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.

Oliotaulukko • sanat-taulukko alkuarvoisessa tilanteessa: sanat null null

Oliotaulukko • sanat-taulukko alkuarvoisessa tilanteessa: sanat null null

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

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.

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

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).

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.

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 { public Double kiedo(double luku) { Double luku. Oliona = luku; return luku. Oliona; } Suora sijoitus riittää, alkeistyyppi muuntuu olioksi. public double palauta(Double luku. Oliona) { double luku = luku. Oliona; return luku; } } public static void main(String[] args) {Suora sijoitus riittää, olio Wrapper. Esimerkki muunnin = new Wrapper. Esimerkki(); double luku. Alkeistyyppisenä = 123. 45; muuntuu alkeistyypiksi. Double luku. Oliona = muunnin. kiedo(luku. Alkeistyyppisenä); luku. Alkeistyyppisenä = muunnin. palauta(luku. Oliona); }

Wrapper-luokat • Ilman autoboxingia sama toiminta vaatisi seuraavan koodin.

Wrapper-luokat • Ilman autoboxingia sama toiminta vaatisi seuraavan koodin.

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 { public Double kiedo(double luku) { Double luku. Oliona = new Double(luku); return luku. Oliona; } Pelkkä sijoitus ei riitä. public double palauta(Double luku. Oliona) { double luku = luku. Oliona. double. Value(); return luku; } } public static void main(String[] args) { Wrapper. Esimerkki muunnin = new Wrapper. Esimerkki(); Pelkkä sijoitus ei riitä. double luku. Alkeistyyppisenä = 123. 45; Double luku. Oliona = muunnin. kiedo(luku. Alkeistyyppisenä); luku. Alkeistyyppisenä = muunnin. palauta(luku. Oliona); }

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

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

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

Linkitetyt listat • Tieto on viittausmuuttuja, eli viittaa olioon. 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

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 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

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.

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>();

Array. List –luokka • Tärkeimpiä metodeja: add (ylikuormitettu) lisää elementin listaan clear tyhjentää listan

Array. List –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 is. Empty tutkii onko lista tyhjä remove (ylikuormitettu) poistaa elementin halutusta positiosta tai halutun elementin – size palauttaa listan elementtien lukumäärän – – –

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 palauttaa arvon true, mikäli kokoelmassa on vielä elementtejä jäljellä – next palauttaa kokoelman seuraavan elementin – remove 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.

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.

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

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 */ public class Array. List. Esimerkki { Luokassa käytetään private Array. List lista; pakkauksessa java. util /** * Oletusmuodostin sijaitsevia luokkia */ 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();

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

/** * 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); }

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

/** * 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); }

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

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"); } }

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

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.

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

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>();

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

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

Hash. Mapin käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Hash. Map -luokkaa. • Katso myös kirjan

Hash. Mapin käyttöesimerkki • Seuraava esimerkkiohjelma käyttää Hash. Map -luokkaa. • Katso myös kirjan esimerkki 9. 8.

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");

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 + ". "); } }