Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Samankaltaiset tiedostot
Listarakenne (ArrayList-luokka)

Taulukot. Jukka Harju, Jukka Juslin

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Java-kielen perusteet

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Java kahdessa tunnissa. Jyry Suvilehto

18. Abstraktit tietotyypit 18.1

17. Javan omat luokat 17.1

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin jatkokurssi, kurssikoe

Java-kielen perusteet

17. Javan omat luokat 17.1

Java-kielen perusteet

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luokan sisällä on lista

Rajapinta (interface)

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

TIETORAKENTEET JA ALGORITMIT

Osio2: Taulukot Jukka Juslin

16. Javan omat luokat 16.1

Olio-ohjelmointi Syntaksikokoelma

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmoinnin perusteet Y Python

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Olio-ohjelmointi Javalla

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä

Metodien tekeminen Javalla

Taulukoiden käsittely Javalla

Taulukot, silmukat ja muut joka koodin pikku veijarit

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Osoitin ja viittaus C++:ssa

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Mikä yhteyssuhde on?

Ohjelmoinnin perusteet Y Python

A TIETORAKENTEET JA ALGORITMIT

Mitä poikkeuskäsittely tarkoittaa?

Ohjelmoinnin perusteet, kurssikoe

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Java-kielen perusteita

Luokkakirjastot. esiintymämetodien käytöstä:

Ohjelmoinnin peruskurssi Y1

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Harjoitus 4 (viikko 47)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

7/20: Paketti kasassa ensimmäistä kertaa

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Ohjelmoinnin perusteet Y Python

Ohjelmointi Tunnilla 1 (5) Viikko 7 tuntitehtäviä: metodien tekeminen Javalla

1. Omat operaatiot 1.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin perusteet Y Python

Ohjelmointiharjoituksia Arduino-ympäristössä

KOHDELUOKAN MÄÄRITTELY

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

7. Näytölle tulostaminen 7.1

Javan GUI Scratchaajalle

Muuttujat ja kontrolli. Ville Sundberg

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

UML ja luokkien väliset suhteet

Ohjelmoinnin perusteet Y Python

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT... 5

7. Oliot ja viitteet 7.1

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

13. Loogiset operaatiot 13.1

14. Poikkeukset 14.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT... 5

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2010 Välikoe / 26.3

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

1 Tehtävän kuvaus ja analysointi

Tietorakenteet, laskuharjoitus 8, malliratkaisut

Tieto- ja tallennusrakenteet

Transkriptio:

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka

Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi int, double jne.) eivät ole luokkia eikä niistä luoda olioita On kuitenkin tilanteita, jolloin tällainen käsittely on tarpeen, esimerkiksi kun halutaan tallentaa alkeistyyppisiä tietoja listarakenteeseen (käsitellään seuraavaksi), jonka sisältämien tietojen tulee olla viittausmuuttujia Tätä varten Javassa on alkeistyyppisiä muuttujia vastaavat luokat, joita kutsutaan kääreluokiksi (wrapper classes) Kääreluokat sisältävät myös hyödyllisiä metodeja edustamiensa tietotyyppien käsittelyyn 2 29.3.2012

Javan alkeistietotyypit ja vastaavat kääreluokat Alkeistietotyyppi int double char boolean short long byte float Kääreluokka Integer Double Character Boolean Short Long Byte Float 3

Autoboxing Javassa on JDK 1.5:n myötä olemassa ns. autoboxing-ominaisuus, joka tarvittaessa muuntaa automaattisesti alkeistietotyyppisen muuttujan kääreluokan olioksi ja päinvastoin: Integer lukuolio = 232; int luku = lukuolio; Double lukuolio2 = 112.3; double luku2 = lukuolio2; 4

Integer-luokan metodeita: (1) public int intvalue() palauttaa olion arvon alkeistietotyypin kokonaislukuna public double doublevalue() palauttaa olion arvon alkeistietotyypin desimaalilukuna public String tostring() palauttaa olion arvon merkkijonona public static int parseint(string mjono) tulkitsee parametrina tulleesta merkkijonosta kokonaisluvun public boolean equals(integer luku) Integer-olion tietosisällön vertailu toiseen Integer-olioon 5

Double-luokan metodeita: (2) public double doublevalue() palauttaa olion arvon alkeistietotyypin desimaalilukuna public int intvalue() palauttaa olion arvon alkeistietotyypin kokonaislukuna (desimaalit katkaistaan) public String tostring() palauttaa olion arvon merkkijonona public static double parsedouble(string mjono) tulkitsee parametrina tulleesta merkkijonosta kokonaisluvun public boolean equals(double luku) tietosisällön vertailu toisen Double-olion kanssa 6

Tuntitehtävä 1: WrapperKokeilu Käydään läpi viikon tuntitehtävistä tehtävä 1, ks. tuntitehtävät. 7

Listarakenne (oppikirjan luku 10.10) (ArrayList-luokka) Listarakenteesta Javan ArrayList Listan luonti ArrayList-luokan metodit Listan läpikäynti Indeksin perusteella Iteraattorin avulla

Listarakenteesta Lista on taulukon kaltainen rakenne, mutta sen kokoa ei tarvitse määrätä ennalta (siksi sanotaan, että taulukko on staattinen ja lista on dynaaminen) Listan alkioihin viitataan järjestysnumerolla samaan tapaan kuin taulukon alkioihin Listaan voidaan lisätä mihin väliin tahansa alkioita ja lista pitää järjestysnumerot ajan tasalla Listasta voidaan poistaa mistä välistä tahansa alkioita ja lista pitää järjestysnumerot ajan tasalla 9

Javan ArrayList Javassa listarakenteen eräs toteutus on luokka ArrayList Listaan voidaan lisätä oliotyyppisiä muuttujia (viittausmuuttujia), ei siis alkeistietotyyppisiä muuttujia (tarvittaessa käytetään kääreluokkia) Lista voidaan tyypittää, jolloin listaan voidaan laittaa vain samantyyppisiä olioita (tällä jaksolla käytämme tyypitettyjä listoja) Listan indeksointi alkaa nollasta, kuten taulukollakin 10

Listan luonti Lista luodaan sen mukaan, minkä tyyppisiin olioihin (E) se viittaa ArrayList <E> listannimi = new ArrayList<E>(); Esim. lista, joka viittaa Integer-olioihin ArrayList <Integer> lista = new ArrayList <Integer>(); Esim. lista, joka viittaa Double-olioihin ArrayList <Double> dlista = new ArrayList <Double>(); Esim. lista, joka viittaa Tuote-olioihin ArrayList <Tuote> tuotelista = new ArrayList<Tuote>(); 11

Esim. lista ArrayList <Integer> lista = new ArrayList <Integer>(); for (int i=1;i<5;i++) lista.add(i); Tunnussolmu lista 1 2 3 4 12

ArrayList-luokan metodeita: public int size() palauttaa listan koon eli listan alkioiden lukumäärän public E get(int i) Palauttaa listan alkiosta i viittaavan olion public boolean add( E olio) lisää alkion listan loppuun public void add(int i, E olio) Lisää alkion listan kohtaan i, aikaisemmin kohdassa i ollut alkio siirtyy kohtaan i+1, jne. public E set(int i, E olio) Korvaa alkiosta i viittaavan olion parametrin oliolla public boolean isempty() kertoo onko lista tyhjä 13

ArrayList-luokan metodeita jatkuu public void clear() Tyhjentää listan public int indexof (E olio) etsii listasta parametrissa välitettyä oliota ja palauttaa sen paikan/indeksin public E remove (int index) Poistaa listan solmun kohdassa index, palauttaa arvonaan olion, johon poistettu solmu viittasi 14

Tuntitehtävä 2: EkaLista Käydään läpi viikon tuntitehtävistä tehtävä 2, ks. tuntitehtävät. 15

Listan läpikäynti Listarakenne tarvitsee usein käydä läpi alkio kerrallaan, esimerkiksi, kun Listan sisältö halutaan tulostaa muotoillusti Listasta halutaan etsiä tiettyä alkiota Lista halutaan järjestää Läpikäyntiin on kaksi tapaa: indekseihin perustuva ja iteraattorin avulla tehtävä 16

Listan läpikäynti indeksin avulla Indekseihin perustuva läpikäynti vastaa taulukon läpikäyntiä Esimerkiksi lista voidaan käydä läpi alusta loppuun ja tulostaa alkiot seuraavasti: for (int i = 0; i < lista.size(); i++ ) System.out.println(lista.get(i)); 17

Tuntitehtävä 3: Käydään läpi viikon tuntitehtävistä tehtävä 3, ks. tuntitehtävät. 18

Listan läpikäynti iteraattorin avulla Lista voidaan käydä läpi myös iteraattorin avulla Javassa on myös rakenteita, joiden alkioita ei indeksoida juoksevalla numerolla. Tällaiset rakenteet, kuten HashMap (ei käsitellä tällä opintojaksolla) on käytävä läpi iteraattorin avulla Läpikäynti iteraattorin avulla tehdään käyttämällä luokkaa Iterator seuraavalla sivulla olevan esimerkin tapaan (huomaa myös seuraavan alkion haku listasta iteraattorin avulla) 19

Iterator-luokan metodeita public boolean hasnext() Onko iteraattorin viittaama alkio listan viimeinen? public E next () Siirtää iteraattorin viittaamaan seuraavaa alkiota ja palauttaa ko. alkion viittaaman olion public void remove () Poistaa iteraattorin viittaaman alkion ArrayList-luokalla on käytettävissä metodi: public Iterator <E> iterator () Metodi palauttaa iteraattorin siten, että tämä viittaa listan tunnussolmuun 20

Iterator-esimerkki String mjono; ArrayList <String> lista = new ArrayList<String>(); lista.add("nolla"); lista.add("yksi"); lista.add("kaksi"); Iterator <String> it = lista.iterator(); while (it.hasnext() == true) { mjono= it.next(); } System.out.println(mjono); 21

Tuntitehtävä 4: EkaLista2 Tehdään viikon tuntitehtävistä tehtävä 4, ks. tuntitehtävät. 22

Haku ja lajittelu listarakenteen tapauksessa (vrt. viikko 6 taulukoista haku ja taulukoiden lajittelu) Haku ArrayList-rakenteesta ArrayList-listan alkioiden lajittelu Lajittelu Javan valmiilla välineillä

Haku ArrayList-rakenteesta Listasta tai vastaavasta rakenteesta (kuten aiemmin taulukoista) on usein tarpeen hakea tietoa tai tiettyä alkiota Suoraviivainen haku (peräkkäishaku) tapahtuu käymällä rakenne läpi alkio kerrallaan ja vertailemalla jokaista alkiota tai alkion sisältämää tietoa etsittävään Lisäksi täytyy päättää, mitä tehdään jos haettava löytyy ja mitä tehdään, jos haettavaa ei löydy Lajitelluista rakenteista voidaan hakea muillakin tavoilla (esim. binäärihaku), mutta niitä ei käsitellä tällä jaksolla 24

Tuntitehtävä 5: HakuListasta Käydään läpi viikon tuntitehtävistä tehtävä 5, ks. tuntitehtävät. 25

ArrayList-listan alkioiden lajittelu Kuten aiemmin taulukotkin, myös lista tai muu vastaava rakenne on myös usein tarpeen lajitella alkioiden tai alkioiden sisältämän tiedon mukaiseen kasvavaan tai laskevaan järjestykseen Lajittelun voi toteuttaa itse (esim. omana metodinaan, kuten taulukoiden tapauksessa on aiemmin tehty) tai käyttää järjestämiseen Javan valmiita välineitä Javan valmiit välineet mahdollistavat lajittelun esimerkiksi alkeistyyppisiä tai String-tyyppisiä tietoja sisältäville taulukoille ja listoille 26

Tuntitehtävä 6: ListanLajittelu Käydään läpi viikon tuntitehtävistä tehtävä 6, ks. tuntitehtävät. 27

Lajittelu Javan valmiilla välineillä Taulukko voidaan järjestää kasvavaan järjestykseen Javan luokan Arrays tarjoamalla metodilla: static void sort ( E [] taulu) Vastaavasti listan voi järjestää kasvavaan järjestykseen luokan Collections metodin avulla: static void sort ( ArrayList <E> lista) Listan alkioiden järjestyksen voi tarvittaessa myös kääntää luokan Collections metodin avulla: static void reverse (ArrayList <E< lista) 28

Tuntitehtävä 7: ListanJarjestaminen2 Käydään läpi viikon tuntitehtävistä tehtävä 7, ks. tuntitehtävät. Mietitään myös, milloin kannattaa käyttää omaa järjestämismetodia ja milloin Javan valmiita välineitä? Miksi? 29