Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
© Jukka Juslin1 Ohjelmointitaito (ict1td002, 12 op) Opintojakson esittely Kevät 2008 Jukka Juslin, Raine Kauppinen Tuloksellinen Java-ohjelmointi.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 13 Monimuotoisuus.
16. Javan omat luokat.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
© Jukka Harju, 2005 Javan util -pakkaus •Javan util -pakkaus sisältää monia hyödyllisiä luokkia ja rajapintoja. –Kaikki ao luokat ovat pakkauksessa java.util.
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot Jukka Juslin © Jukka Juslin 2006.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
22. Taulukot.
Käännösaikaiset virheilmoitukset • Tulee silloin, kun koodissa on jotain sellaista, joka ei ole Javan syntaksin mukaista • Esim. – Syntax error, insert.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 2 Ensimmäiset ohjelmat © Jukka Harju, Jukka Juslin.
7. Oliot ja viitteet.
Java Java on Sun Microsystems yhtiön kehittämä laaja olio-pohjainen ohjelmointikieli, joka on laitteistoriippumaton. Laitteistoriippumattomuudessa on.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Standardi- ja tietorakenneluokkia.
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
22. Taulukot.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
2. Lisää Java-ohjelmoinnin alkeita
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi HashMap, Properties, Logger, etc Tuloksellinen Java-ohjelmointi.
Tuloksellinen Java-ohjelmointi Luku 2 Ensimmäiset ohjelmat
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
Ict02d Johdanto Dynaamiset tietorakenteet –Rakenteiden tilavaraus laajenee/pienenee ajonaikaisesti. –Rakenteita on useita tyyppejä Linkitetty lista Pino.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Sähköpostin lähetys Java- ohjelmasta Jukka Juslin.
15. Ohjelmoinnin tekniikkaa
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
5. Kapselointi.
2. Taulukot.
17. Javan omat luokat.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
2. Taulukot.
16. Javan omat luokat.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

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