osio2 luento1 osa2 - Haaga-Helia...

48
© Jukka Juslin 1 Osio2: Taulukot Jukka Juslin

Transcript of osio2 luento1 osa2 - Haaga-Helia...

Page 1: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 1

Osio2:Taulukot

Jukka Juslin

Page 2: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 2

Taulukot• Taulukot ovat olioita, jotka auttavat meitä

organisoimaan suuria määriä tietoa

• Seuraavassa keskitymme näihin:

Taulukon tekeminen ja käyttöRajojen tarkastus ja kapasiteettiTaulukot, jotka tallettavat olioviittauksiaVaihtuvanmittaiset parametrilistatMonidimensioiset taulukotArrayList luokka

Page 3: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 3

Missä ollaan?Taulukoiden luonti ja käyttö

Oliotaulukot

Vaihtelevan pituiset parametrilistat

Kaksiulotteiset taulukotArrayList luokka

Page 4: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 4

Taulukko• Taulukko on järjestetty lista arvoja

0 1 2 3 4 5 6 7 8 9

79 87 94 82 67 98 87 81 74 91

Taulukko, jonka koko on N indeksoidaan nollasta indeksiin N-1 asti

pisteet

Koko taulukollaon yksi nimi

Jokaisella arvolla on numeerinen indeksi

Tämä taulukko säilyttää 10 arvoa, jotka on indeksoitu 0:sta 9:ään

Page 5: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 5

Taulukot• Tiettyyn arvoon taulukossa viitataan käyttämällä

taulukon nimeä, jota seuraa indeksin numerohakasulkeissa

• Esimerkiksi tämä:

pisteet[2];

viittaa arvoon 94 (kolmas arvo taulukossa)

• Indeksi viittaa paikkaan, johon talletetaan tässäyksi int-tyyppinen arvo

Page 6: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 6

Taulukot• Esimerkiksi, taulukon elementtiin voidaan tallettaa

arvo, elementti voidaan tulostaa tai elementtiävoidaan käyttää laskutoimituksessa:

pisteet[2] = 89;

pisteet[eka] = pisteet[eka] + 2;

keskiarvo = (pisteet[0] + pisteet[1])/2;

System.out.println (“Huippu = " + pisteet[5]);

Page 7: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 7

Taulukot• Arvoja, joita pidetään taulukossa, kutsutaan

taulukon elementeiksi tai alkioiksi

• Taulukko tallettaa monta arvoa samaa tyyppiäolevia elementtejä – alkion tai elementin tyyppi

• Elementin tyyppi voi olla primitiivityyppi tai olioviittaus

• Siksi, me voimme luoda taulukon int-muuttujista, taulukon merkeistä, taulukon String luokanolioista, taulukon Kolikko olioista yms.

• Javassa taulukko itse on olio, joka voidaaninstantioida

Page 8: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 8

Taulukot• Toinen tapa kuvata pisteet taulukkoa:

pisteet 79

87

94

82

67

98

87

81

74

91

Page 9: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 9

Taulukkojen luonti• pisteet taulukko voitaisin luoda kuten seuraavassa:

int[] pisteet = new int[10];

• Muuttujan pisteet tyyppi on int[] (taulukko int-arvoja)

• Huomaa, että tauluko tyyppinä ei määrää taulukon kokoa, vaan jokaiselle taulukkoluokan oliolle annetaan oma koko

• Viittausmuuttuja pisteet asetetaan osoittamaan uuteentaulukko-olioon, joka pystyy säilyttämään 10 int-tyyppistämuuttujaa

Page 10: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 10

Taulukkojen luonti• Muutamia muita esimerkkejä taulukon luonnista:

float[] hinnat = new float[500];

boolean[] vivut;vivut = new boolean[20];

char[] koodit = new char[1750];

Page 11: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 11

Taulukkojen käyttö• JDK 1.5:sen uusi iterator luokka helpottaa

taulukon elementtien läpikäyntiä

for (int piste : pisteet)System.out.println (piste);

• Me käytämme kuitenkin seuraavantyyppistäratkaisua

for (int i=0; i<pisteet.length; i++) System.out.println(pisteet[i]);

Page 12: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 12

Taulukon rajojen tarkistaminen• Kun taulukko on luotu, sillä on kiinitetty koko

(myöhemmin kuulette kenties Vector-luokanolioista, jotka poistavat tämän rajoituksen)

• Indeksi, jolla viitataan taulukon elementtiin pitääkuulua taulukon rajojen sisään

• Siis, indeksin arvo pitää olla olla 0:sta N-1:seen

• Java kääntäjä heittääArrayIndexOutOfBoundsException jostaulukon indeksin on rajojen ulkopuolella

• Tätä kutsutaan automaattiseksi rajojentarkistamiseksi

Page 13: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 13

Rajojen tarkistus• Esimerkiksi taulukko koodit voi pitää 100 arvoa,

mutta se indeksoidaan vain arvoista 0 arvoon 99

• Jos laskurin arvo on 100, silloin seuraavaviittaus aiheuttaa poikkeuksen heittämisen:

System.out.println (koodit[laskuri]);

• On tyypillistä tehdä ns. off-by-one virheitätaulukkoja käytettäessä

for (int index=0; index <= 100; index++)koodit[index] = index*50 + epsilon;

ongelma

Page 14: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 14

Rajojen tarkistus• Jokaisella taulukko-oliolla on julkinen vakio

nimeltään length, joka tallettaa taulukon koon

• Siihen viitataan taulukon nimen kautta käyttäenlength-attribuuttia, ei getLength:

int pituus = pisteet.length;

• Huomaa, että length säilyttää elementtienlukumäärää ei suurinta indeksinumeroa

Page 15: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 15

Toinen taulukon luontitapa• Hakasulkeet taulukon tyypissä voidaan laittaa

taulukon nimen ennen tai jälkeen

• Siksi seuraavaksi kaksi lausetta ovat täysin samatmerkitykseltään:

float[] hinnat;

float hinnat[];

• Ensimmäinen formaatti on yleisesti helpomminluettava ja sitä pitäisi käyttää (vertaa public static void main lauseen eroihin!)

Page 16: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 16

Taulukkojen sijoittaminen

• Taulukoita voidaan sijoittaa toiseen taulukkoon sijoitusoperaation avulla

• Luonnollisesti vain siinä tapauksessa, ettäsijoitettava taulukko mahtuu sijoituksen kohteeseen asiassa on järkeä

Esim. pisteet = jukanPisteet;

Page 17: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 17

Alustuslistat• Alustuslistaa voidaan käytää taulukon luomisessa

ja arvojen sijoittamisessa taulukkoon samantien

• Arvot ovat aaltosulkeiden välissä ja toisistaanerotetut pilkkujen avulla

• Esimerkkejä:

int[] yksikot = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476};

char[] arvosanat = {‘1', ‘2', ‘3', ‘4', ’5'};

Page 18: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 18

Alustuslistat• Huomaa, että kun alustuslistaa käytetään:

new operaattoria ei käytetä

Taulukon kokoa ei määritellä ([5] yms)

• Taulukon koko määrittyy automaattisesti senmukaan kuinka monta arvoa alustuslistassa on

• Alustuslistaa voidaan käyttää vain taulukonluonnin yhteydessä

Page 19: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 19

Taulukot parametrinä• Koko taulukko voidaan välittää parametrina

metodille

• Kuten mikä tahansa muun olion kanssa, osoitintaulukkoon (eli olioon) välitetään metodille

• Kun taulukkoa muutetaan metodin sisällä myösalkuperäinen taulukko muuttuu (eli taulukko siellämistä metodia on kutsuttu) tarpeen ei siis ole palauttaa taulukkoa metodista

• Yksittäinen taulukon alkio voidaan välittäämetodille myös, jossa tapauksessa alkion tyypintulee vastata metodin vastaanottamaa tyyppiä(formal ja actual parameters)

Page 20: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 20

Missä ollaan?Taulukoiden luonti ja käyttö

Oliotaulukko

Vaihtelevan mittaiset parametrilistat

Kaksiulotteiset taulukotArrayList luokka

Page 21: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 21

Oliotaulukot• Taulukon elementit voivat olla olioviitteitä

• Seuraava lause varaa tilaa viidelle viittaukselleString luokan olioihin

String[] sanat = new String[5];

• Se ei luo String olioita itseään

• Alkuarvona taulukkoa pitää null referenssejä(konstruktori)

• Olio, joka on talletettu taulukkoon täytyyinstantioida omassa paikassaan (new avainsanayms.)

Page 22: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 22

Oliotaulukko• sanat taulukko alkuarvoisessa tilanteessa:

sanat -

-

-

-

-

• Tässä kohdassa seuraava referenssi heittäisiNullPointerException:in:

System.out.println (sanat[0]);

Page 23: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 23

Oliotaulukot• Sen jälkeen kun muutamia String olioita on luotu

ja talletettu taulukkoon:

“hauskuus”sanat

-

-

“luonti”

“nopeus”

Page 24: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 24

Oliotaulukot• Pidä mielessäsi, että String olioita voidaan luoda

käyttäen literaaleja

• Seuraava lause luo taulukko-olion, jonka nimi on verbit ja täyttää sen neljällä String oliollakäyttäen merkkijonoliteraaleja

String[] verbit = {“leiki", “työskentele", “syö", “nuku"};

Page 25: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 25

Oliotaulukot• Seuraavaksi katsomme esimerkkijä, joka ylläpitää

joukkoa CD olioita

Page 26: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 26

Luokkakaavio• UML luokkakaavio Kappaleet ohjelmalle:

Kappaleet

+ main (args : String[]) : void

CDKokoelma- kokoelma : CD[]- lukumäärä : int- yhteisHinta : double

+ lisaaCD (nimi : String, artist : String, hinta : double, kappaleMäärä : int) : void

+ toString() : String- kasvataKokoa() : voidCD

- nimi : String- artisti : String- hinta : double- kappaleMäärä : int

+ toString() : String

*

1

Page 27: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 27

Komentorivi argumentit• main metodin formaali määritelmä vihjaa, että että

ko. Metodi ottaa String olioita parametrinä

• Nämä arvot tulevat komentorivi argumenteistajotka annetaan ohjelmalle kun ohjelma ajetaan

• Esimerkiksi seuraava kääntäjän kutsuminenvälittää kaksi String oliota mainille:

> java ese uskomaton kiva

• Nämä stringit talletetaan indeksien 0-1 paikallemain metodin Stringitaulukkoon

Page 28: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 28

Missä ollaan?Taulukkojen luonti ja käyttö

Oliotaulukot

EXTRA: Vaihtelevanmittaisetparametrilistat

Kaksiulotteiset taulukotArrayList luokka

Page 29: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 29

Vaihtelevan mittaiset parametrilistat

• Olettaen, että haluisimme tehdä metodin, jokakäsittelee vaihtelevan mittaisen määränparametrejä kutsun mukaan

• Esimerkiksi, jos luomme metodin, jonka nimi on keskiarvo, joka palauttaa tietyn integer parametrien keskiarvon

// yksi kutsu etsiä keskiarvo (neljä lukua)keskiarvo1 = keskiarvo(3, 5, 1, 2);

// toinen kutsu saada keskiarvo kolmestakeskiarvo2 = keskiarvo(3, 5, 1);

Page 30: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 30

Vaihtelevan mittaiset parametrilistat

• Voisimme ns. ylikuormittaa keskiarvo metodin

Huono puoli: tarvitsisimme erikseen eri version metodistajokaiselle parametrilistalle

• Voisimme määrittää metodin, joka ottaa vastaaninteger taulukon

Huono puoli: meidän täytyisi luoda taulukko ja tallettaamuuttujat ennenkuin metodia kutsutaan kullakin kerralla

• Tämä sijasta, Java JDK 1.5:sta lähtien tarjoaamukavan tavan luoda muuttuvan pituisiaparametrilistoja

Page 31: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 31

Vaihtelevan pituiset parametrilistat• Käyttäen tiettyä syntaksia

formaalissaparametrilistassa, voimme määritellämetodin ottamaan vastaan minkä tahansa määränparametrejä jotka ovat samantyyppisiä

• Jokaisella kutsulla, parametrit automaattisestilaitetaan taulukkoon, jotta pystytään helpostiprosessoimaan parametrit metodissa

public double keskiarvo(int ... lista){

// toiminnot} elementin

tyyppitaulukon

nimi

Ilmoittaa että vaiht. pit. lista kyseessä

Page 32: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 32

Vaihtelevan mittaiset parametrilistat• Miksi esiteltiin edes koko asia?• Opimme mikä on formaali parametri• Tästä opimme, että public static void main määre

ei ole mikään kiveen hakattu asia. Esimerkiksiseuraava toimii hyvin!

public class Häkki {

public static void main(String ... argsi) {System.out.println(argsi[0]);System.out.println("ict02d ok");

}}

Page 33: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 33

Vaihtelevan mittaiset parametrilistat

public double keskiarvo (int ... lista){

double tulos = 0.0;

if (lista.length != 0){

int summa = 0;for (int numero : lista)

summa += numero;tulos = (double)numero / lista.length;

}

return(tulos); // muista sulkeet tähän!}

Page 34: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 34

Vaihtelevan mittaiset parametrilistat

• Parametrin tyyppi voi olla mikä tahansaprimitiivinen tai oma oliotyyppi

public void tulosta arvosanat (Arvosana ... arvosanat)

{for (Arvosana numero : arvosanat)

System.out.println(numero);}

Page 35: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 35

Vaihtelevan pituiset parametrilistat• Metodi, joka ottaa vastaan vaihtelevan määrän parametrejä

voi myös ottaa vastaan muita parametrejä

• Seuraava metodi ottaa vastaan yhden int arvon, yhdenString olion, ja vaihtelevan mittaisen määrän doubletyypisiä arvoja numerot nimiseen taulukkoon

public void testi (int laskuri, String nimi,double ... numerot)

{// toiminnot

}

Page 36: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 36

Muuttuvan pituiset parametrilistat• Muuttuvanpituinen parametrilista pitää olla esim.

Metodin määrittelyssä viimeisenä (formaalissamäärittelyssä)

• Yksi metodi ei voi ottaa vastaan kahta muuttuvanpituista parametrilistaa

• Konstruktorit voidaan myös asettaa niin, että neottavat parametrinä vaihtelevan pituisiaparametrilistoja

Page 37: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 37

Missä ollaan?Taulukkojen luonti ja käyttö

Oliotaulukot

Vaihtelevan mittaiset parametrilistat

Kaksiulotteiset taulukotArrayList luokka

Page 38: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 38

Kaksiulotteiset taulukot• yksiulotteinen taulukko tallettaa listan elementtejä

• kaksiulotteinen taulukko voidaan ajatella taulukkonaelementtejä, niin kuin Excel ohjelmassa: taulukolla on rivit jasarakkeet (rivit ja kolumnit)

yksiulottuvuus

kaksiulottuvuutta

Page 39: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 39

Kaksiulotteiset taulukot• Tarkastiottaen kaksiulotteinen taulukko on

taulukko, joka sisältää taulukkoja

• Kaksiulotteinen taulukko luodaan määrittelemälläkunkin ulottuvuuden koko erikseen:

int[][] pisteet = new int[22][3];

• Taulukkoelementtiin viitataan käyttämällä kahtaindeksiarvoa:

arvosana = pisteet[3][2];

• Taulukkoon, joka määritellään yhdellä rivillävoidaan viitata yhdellä indeksinumerolla

Page 40: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 40

Kaksiulotteinen taulukko

integerinttaulukko[5][12]

Integer taulukkoint[]taulukko[5]

2D taulukko integereitäint[][]taulukko

KuvausTyyppiLause

Page 41: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 41

Moniulotteiset taulukot• Taulukolla voi olla monta ulotteisuutta – jos sillä on enemmän

kuin yksi ulottuvuus, sitä kutsutaan moniulotteiseksitaulukoksi

• Jokainen uluttuvuus muodostaa jokaisen arvon alle halutunkokoisen määrän arvoja. Esim. arvosanat[3][2] jossa indeksikolmonen viittaisi opiskelijaan Matti ja numero kaksi siihenettä poimitaan osion kolme arvosana

• Jokaisella ulottuvuudella on oma julkinen length vakionsa

• Koska jokainen ulottuvuus on taulukko taulukkoviittauksista, taulukot yhden ulottuvuuden sisällä voivat olla erimittaisia

Näitä kutsutaan sillointällöin rosoisiksi taulukoiksi

Page 42: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 42

Moniulotteiset taulukot• Seuraavassa kolmiulotteinen (vrt. rahan

laskeminen taulukoissa, taloushallinto)

osastot

lähiesimiehetbudjetit

Page 43: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 43

Missä ollaan?Taulukkojen luonti ja käyttö

Oliotaulukot

Vaihtelevan pituiset parametrilistat

Kaksiulotteiset taulukotArrayList luokka

Page 44: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 44

ArrayList luokka• ArrayList luokka on osa java.util pakettia

• Kuten taulukko, se voi tallettaa listan arvoja javiitata kuhunkin käyttäen numeerista indeksiä

• Kuitenkin, et voi käyttää hakasulje merkintääArrayList olion kanssa

• Lisäksi, ArrayList olio kasvaa ja kutistuutarpeiden mukaan, säätäen kokoaan tilanteenvaatimuksia vastaavaksi

Page 45: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 45

ArrayList luokka• Elementtejä voidaan lisätä tai poistaa yhden

metodin kutsulla

• Kun elementti lisätään, muut elementit “liikkuvatsyrjään” tehdäkseen tilaa

• Yhtälailla, kun elementti poistetaan, lista “supistuukasaan” sulkeakseen tyhjän kohdan

• Elementtien indeksit muuttuvat vastaavasti niinettä esim. tyhjä kohta häviää

Page 46: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 46

ArrayList luokka• An ArrayList tallettaa viittauksia Object

luokkaan, jolloin mahdollista on tallettaa minkätahansalaisia olioita

• Voimme myös määritellä ArrayList olionhyväksymään vain tietyn tyyppisiä olioita

• Seuraava rivi luo ArrayList olion, joka tallettaavain Suku tyyppisiä olioitaArrayList<Suku> tapaaminen = new ArrayList<Suku>

Page 47: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 47

ArrayListin tehokkuus• ArrayList luokka on toteutettu käyttäen

allaolevaa taulukkoa

• Taulukkoa manipuloidaan niin, että indeksitsäilyvät jatkuvina kun elementtejä lisätään tai poistetaan

• Jos elementtejä lisätään ja poistetaan listanlopusta, prosessointi on suhteellisen tehokasta

• Kun elementtejä lisätään listan alkuun tai keskellelistaa jäljelläolevia elementtejä on siirrettävä

Page 48: osio2 luento1 osa2 - Haaga-Helia ammattikorkeakoulumyy.haaga-helia.fi/~ict1td002/OSIO_2/Luennot/osio2_luento1_osa2.pdfMicrosoft PowerPoint - osio2_luento1_osa2.ppt Author: jusju Created

© Jukka Juslin 48

Yhteenveto• Olemme keskittyneet:

Taulukon luonti ja käyttöRajojen tarkistus ja tilavuusTaulukot olioreferenssien tallentajina (OID)Vaihtelevan pituiset parametrilistatMoniulotteiset taulukotArrayList luokka