Inf1000 (Uke 10) Oppgaveløsning. Hashmap

Like dokumenter
To måter å programmere på. INF1000 : Forelesning 9. Programmering uten objekter. Programmering med objekter: Eksempel på programmering uten objekter

Innhold. INF1000 (Uke 11) Programmering. Rep: Metoder. Rep: Hva er en metode? Litt repetisjon. To måter å programmere på

INF1000 (Uke 11) Programmering

To måter å programmere på. Java 12. Objektvariable. Objektvariablenes levetid. Statisk programmering: Programmering med objekter: Dagens forelesning:

Hva er en metode. Hva skjer når vi kaller en metode

Uke 11 noen tips og råd + eksempel. Noen muligheter. Valg av datamodell: eksempel. Valg av datamodell: oblig 4

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

Oversikt. En del repetisjon. Noen generelle råd INF1000 Uke 10 Gjennomgang av et eksempel. Kunstig intelligens? INF1000-seminar

Oblig4 - forklaringer. Arne og Ole Christian

1. Separatorer (skilletegn) i easyio

Oblig4 - forklaringer. Arne og Ole Christian

Råd 1: Programmer ovenfra ned. INF1000 Uke 10. Gruppering etter eier. Velg datastruktur etter hva som skal gjøres!

INF1000 Uke 10. Hvordan gripe an et stort problem? 5 råd Noen eksempler du kan overføre til Oblig 4 Oblig 4 kort oversikt Et større programeksempel

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Uke 9 INF okt 2012 Om separatorer I easyio, Eliza (bruk av HashMap), + mer om metoder og klasser. Arne Maus OMS, Ifi, UiO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

UNIVERSITETET I OSLO

Inf1000 (Uke 7) Objekter, klasser og pekere

Oversikt. Inf1000 (Uke 7) Objekter, klasser og pekere. Løkker gjør setninger flere ganger. Variable, deklarasjon og tilordning

s 678 * Hvordan designe og programmere objektorientert * Støtte til oppstart på Oblig 4: Jobbe frem eget forslag til datastruktur

INF 1000 høsten 2011 Uke 10: 25. november

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

UNIVERSITETET I OSLO

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

INF Uke 10. Ukesoppgaver oktober 2012

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

Uke 8 - Oppramstyper, HashMap og Innstikksortering, litt javadoc. 17. oktober 2013, Arne Maus Inst. for informatikk, UiO

UNIVERSITETET I OSLO

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF1000: noen avsluttende ord

Dagens tema Kapittel 8: Objekter og klasser

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

Blokker og metoder INF1000 (Uke 6) Metoder

INF1000: Forelesning 7. Konstruktører Static

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1000: Forelesning 7

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1000 : Forelesning 4

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

UNIVERSITETET I OSLO

INF1000: Forelesning 10

Inf1000 (Uke 10) HashMap og ArrayList

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Oversikt. Inf1000 (Uke 7) Objekter, klasser og pekere. Variable, deklarasjon og tilordning. Løkker gjør setninger flere ganger

INF1000: Forelesning 6. Klasser og objekter del 1

INF1000: noen avsluttende ord

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Oppramstyper, HashMap og Innstikksortering, litt. 6. oktober 2009, Arne Maus Inst. for informatikk, UiO

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

PRØVEEKSAMEN (rettet versjon 27/11)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Forelesning inf Java 5

Forelesning inf Java 5

INF1000 (Uke 6) Mer om metoder, tekster

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

Endret litt som ukeoppgave i INF1010 våren 2004

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

UNIVERSITETET I OSLO

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

UNIVERSITETET I OSLO

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Inf1000 uke 5 18.sept. 2007

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

INF1000: Forelesning 11

Introduksjon til objektorientert programmering

Transkript:

Inf1000 (Uke 10) Oppgaveløsning. Hashmap Programmering med og uten objekter: hva er forskjellen? Noen generelle råd vedrørende oppgaveløsing HashMap Are Magnus Bruaset og Arild Waaler Institutt for informatikk Universitetet i Oslo To måter å programmere på Programmering uten objekter Var fokus i starten av kurset Vi lager ikke objekter av klassene Alle variable og metoder er deklarert som static Begrepsmessig enkelt, men lite egnet for større programmer Programmering med objekter: Er fokus for resten av kurset (og eksamen). Vi lager objekter av klassene (noen eller alle) Variable og metoder er vanligvis ikke deklarert som static Begrepsmessig noe mer komplisert, men mye bedre egnet for større programmer 1 2 Eksempel på programmering uten objekter Eksempel på programmering med objekter class VolumBeregning { static double pi = 3.14; static int maxantall = 10; static double finnvolum(double radius) { static int finnsum(int k) { Alle variable er deklarert som static Alle metoder er deklarert som static class StudentRegister { String fnr; void init() { String finnnavn() { Variable er ikke deklarert som static (vanligvis) Metoder er ikke deklarert som static (vanligvis) 3 4

Organisering av veldig små programmer Organisering av alle andre programmer I veldig små programmer (noen få linjer) kan all programkode ofte ligge i main-metoden. Dette blir da naturlig nok programmering uten objekter (av egendefinerte klasser). I alle andre programmer bør main-metoden kun brukes til å få igang programmet. Da lager vi som hovedregel objekter av alle andre klasser enn den som inneholder main-metoden. Eksempel: import easyio.*; import java.io.*; class VeldigLiteProgram { In tast = new In(); System.out.print("Gi et filnavn: "); String fnavn = tast.inline(); if (new File(fnavn).exists()) { System.out.println("Filen fins"); else { System.out.println("Filen fins ikke"); 5 class MittProgram { Flyreservasjon fr = new Flyreservasjon(); fr.ordreløkke(); class Flyreservasjon { void ordreløkke() { 6 Det er mulig å slå sammen de to klassene på forrige foil til en klasse: class MittProgram { MittProgram mp = new MittProgram(); mp.ordreløkke(); void ordreløkke() { Variant Da lager vi ett enkelt objekt av klassen med main-metoden, og bortsett fra oppstarten i main-metoden foregår programeksekveringen i objektet. En smakssak om man velger å gjøre det slik, eller slik som på forrige foil. 7 Initialisering av variable i et objekt Anta at programmet vårt inneholder denne klassen: class Person { String fnr; Når vi har laget et objekt (med new) ønsker vi normalt å gi variablene i objektet fornuftige verdier med en gang. Noen muligheter: Sett verdiene til objektvariablene direkte med prikk-notasjon: Person p = new Person(); p.navn = Petter ; p.fnr = 15108559879 ; Lag en init-metode i klassen: Person p = new Person(); p.init( Petter, 15108559879 ); Benytt en konstruktør: Person p = new Person( Petter, 15108535738 ); 8

Konstruktører - repetisjon Eksempel En konstruktør er en spesiell type objektmetode som du kan bruke for å sikre at objektet starter sitt liv med fornuftige verdier i objektvariablene. Konstruktører har alltid samme navn som klassen de ligger i utføres automatisk når et objekt opprettes med new har ingen returverdi, men skal ikke ha void foran seg overlastes ofte, dvs det er ofte flere konstruktører i en og samme klasse, hvor konstruktørene skiller seg fra hverandre ved antall parametre og/eller typen på parametrene. 9 class TestSirkel { Sirkel s1 = new Sirkel(); System.out.println("Radius: " + s1.radius); Sirkel s2 = new Sirkel(5.0); System.out.println("Radius: " + s2.radius); class Sirkel { double radius; Sirkel () { radius = 1.0; Sirkel (double r) { radius = r; Konstruktør 1 Konstruktør 2 10 Når det ikke er noen konstruktør Oppgave: virker dette? Når en klasse ikke inneholder noen konstruktør, vil Java selv føye på en "tom konstruktør" uten parametre når programmet kompileres. Dermed er følgende to klassedeklarasjoner ekvivalente: class Sirkel { double radius; Sirkel () { class Sirkel { double radius; Merk: dersom klassen inneholder en eller flere konstruktører, vil Java ikke føye på en "tom konstruktør" uten parametre. Lar dette programme seg kompilere og kjøre? class Oppgave1 { Bil b = new Bil(); class Bil { String regnr; Bil (String regnr) { this.regnr = regnr; SVAR: nei! 11 12

Finn- og sett-metoder Rollefordeling i større programmer Når man skal lage "virkelige" programmer er det vanlig å Deklarere alle objektvariable som private Bruke finn- og sett-metoder for å endre på objektvariable class Eksempel { Student stud = new Student(); stud.settnavn("petter"); System.out.println(stud.finnNavn()) private private String fnr; void settnavn(string navn) {this.navn = navn; String finnnavn() {return this.navn; 13 En klasse som inneholder alt Klasse med main-metode Inneholder main-metoden. Gjør stort sett ikke annet enn åfåprogrammet igang. Klasse med ordreløkke Holder på data-strukturen. Inneholder evt ordreløkke, og metoder som kalles fra denne. Øvrige klasser som inngår som del av datastrukturen 14 Noen tips Klassevariable og objektvariable Legg ikke annen programkode i main enn det som skal til for å få igang programmet (typisk: lage et objekt og kalle på en metode i dette), unntatt i bittesmå programmer. I main kan du velge å lage et objekt av klassen som main ligger i - eller et objekt av en annen klasse. I kurset bruker vi stort sett siste variant. Metoden som kalles fra main er typisk den som er ansvarlig for programkontrollen (f.eks. en ordreløkke), eller en del av den. Programkontrollen kan ligge i en konstruktør eller i en annen metode (f.eks. void ordreløkke()). I kurset gjør vi stort sett det siste. Råd: bestem deg for hvilken organisering du liker best og hold deg til den når du skriver dine egne programmer - så slipper du å kaste bort tid på å velge hver gang du skal lage et nytt program. Objektvariable: Bare definert i objekter av en klasse. Hvert objekt har sitt eget sett med objektvariable. Klassevariable: Definert selv om det ikke er laget objekter av klassen. Alle objekter av klassen deler de samme klassevariablene. 15 16

Objektvariable Objektvariablenes levetid Objektvariable er variable på klassenivå som ikke er deklarert som static. For hvert nytt objekt får vi et fullt sett med nye objektvariable: String fnr; new Student(); new Student(); new Student(); navn: fnr : navn: fnr : String fnr; Disse variablene blir deklarert når vi lager et objekt av klassen ved å skrive new Student(), og de lever så lenge objektet lever. Objektvariablene blir til når objektet blir til (med new) Objektvariablene lever så lenge objektet finnes navn: fnr : 17 18 Klassevariable Klassevariablenes levetid Klassevariable er variable på klassenivå som er deklarert som static. Vi får aldri mer enn ett sett av klassevariable. class Person { static int maxalder=100; int alder=0; String navn=""; maxalder: 100 når klassen refereres første gang new Person(); new Person(); new Person(); alder: 0 navn : "" alder: 0 navn : "" alder: 0 navn : "" 19 class Person { static int maxalder = 100; int alder; void metode() { Denne variabelen blir deklarert når klassen Person blir referert til for første gang under kjøringen av programmet. Variabelen lever helt til programmet avsluttes. Første gang klassen Person blir referert til = første gang programeksekveringen "møter på" Person-klassen, f.eks. :. new Person().. Person.maxAlder.. Person.metode().. 20

Klassemetoder og objektmetoder Klassemetoder (static-metoder) Definert selv om det ikke er laget noen objekter av klassen Kan ses av alle objekter av klassen Kan brukes av andre gjennom dot-notasjon: <klassenavn>.metode() Har ikke tilgang til objektvariable eller objektmetoder Objektmetoder Bare definert i objekter av klassen Kan ses av objektet som metoden befinner seg i Kan brukes av andre gjennom dot-notasjon: <peker>.metode() Har tilgang til alle variable (både klassevariable og objektvariable) og alle metoder (både klassemetoder og objektmetoder) 21 class StudentRegister { Student s1, s2; s1 = new Student(); s1.init("torjus", "S25332"); s2 = new Student(); s2.init("vilde", "S36336"); s1.skrivut(); s2.skrivut(); static static String studid; static void init(string n, String s) { navn = n; studid = s; static void skrivut() { System.out.println("Navn: " + navn); System.out.println("StudId: " + studid); Oppgave Ole lærer å programmere og har laget programmet til venstre. Hvorfor skriver programmet følgende ut på skjermen? Hvordan skal vi endre det? Navn: Vilde StudId: S36336 Navn: Vilde StudId: S36336 22 Å lage en fornuftig datamodell Å lage en fornuftig datamodell (II) Med objekter kan vi ofte organisere våre data bedre. Eksempel: String [] navn = new String[100]; String [] fnr = new String[100]; int [] tlfnr = new int[100]; Informasjonen knyttet til en bestemt person er splittet opp i tre arrayer. Med objekter kan vi samle data og operasjoner på dem. data om studenter data om ansatte data om kurs student-metoder ansatt-metoder kurs-metoder Her ligger alle data og alle metoder samme sted class Person { String fnr; int tlfnr; Person [] personreg = new Person[100]; Informasjonen knyttet til en bestemt person er samlet i et objekt. Bedre organisering særlig når det er mye data å holde orden på. 23 data om studenter student-metoder class Ansatt { data om ansatte ansatt-metoder class Kurs { data om kurs kurs-metoder Metoder og data som hører sammen er samlet. Lett å se hvilke metoder som jobber på hvilke data (modularisering av koden). Lett å kopiere alt som har med personer å gjøre (data+metoder) til andre programmer (gjenbruk). 24

Å lage en fornuftig datamodell (III) Valg av datamodell: eksempel Eksempel: i oblig 3 skulle du holde orden på en rekke studenter en rekke hybler et hybelhus (potensielt flere) class Student class Hybel class Hybelhus En objektorientert løsning (med klassene over) sørger for at variabler og metoder som logisk hører sammen ligger også samlet i programkoden variabler og metoder som ikke har noe med hverandre å gjøre holdes godt atskilt i programkoden Analogi: hjemme hos deg selv, plasser du verktøy, bestikk og CDplater i samme skuff? Sannsynligheten er stor for at du allerede tenker objektorientert. Eksempel: Du har gitt en fil med opplysninger om hvor mange registrerte tilfeller det var av tre ulike sykdommer i Norge hvert av årene 19502000: INFLUENSA KYSSESYKE MENINGITT 1950 1951 1952.. 2000 Hvordan er det naturlig å modellere dette? 25 26 Forslag 1: Gruppere tellinger relatert til samme sykdom class Sykdom { String sykdomsnavn; int[] antalltilfeller = new int[51]; Forslag 2: Gruppere tellinger foretatt samtidig class Aarsdata { int antinfluensa; int antkyssesyke; int antmeningitt; Noen muligheter Valg av datamodell: eksempel 2 Anta at du skal lese en fil med opplysninger om en rekke værstasjoner, der hver linje gir informasjon om en enkelt værstasjon: 4780 GARDERMOEN 202 ULLENSAKER AKERSHUS 10400 RØROS 628 RØROS SØR-TRØNDELAG 18700 OSLO-BLINDERN 94 OSLO OSLO 25590 GEILO-GEILOSTØLEN 810 HOL BUSKERUD.. Forslag 3: Ingen gruppering - tre arrayer int[] influensatilfeller = new int[51]; int[] kyssesyketilfeller = new int[51]; int[] meningittilfeller = new int[51]; Forslag 4: Ingen gruppering en 2D-array int[][] sykdomstilfeller = new int[3][51]; Beste datastruktur avhenger i stor grad av hva du skal bruke dataene til! 27 En opplagt løsning vil da være å gruppere dataene stasjonsvis: class Stasjon { String nummer; double høyde; String kommune;. String fylke; For her linje vi leser fra filen lager vi da et nytt objekt av klassen Stasjon, og fyller objektet med verdiene fra filen 28

Valg av datamodell: eksempel 2 forts. Noen muligheter Anta at det for hver værstasjon også er gitt daglige værmålinger for et halvt år: stasjon dag mnd maxvind nedbør mintemp maxtemp 4780 01 01 1.5 0.0-23.6-13.3 4780 02 01 2.6 0.8-13.7-10.0 4780 03 01 4.6 1.3-17.9-11.7 4780 04 01 4.6 0.1-23.3-16.7 4780 05 01 5.7 0.0-22.9-15.7 4780 06 01 3.1 1.0-22.9-16.0.. Hvordan modellerer vi disse dataene? Svaret er mindre opplagt. Forslag 1: Ingen gruppering class Stasjon { double[] maxvind; double[] nedbør; double[] mintemp; double[] maxtemp; Forslag 2: Gruppere målinger utført samtidig (dvs gruppere etter dag) class Dagdata { double maxvind; double nedbør; double mintemp; double maxtemp; 29 class Stasjon { Dagdata[] dagdata; 30 Forslag 3: gruppere etter både måned og dag class Dagdata { double maxvind; double nedbør; double mintemp; double maxtemp; Noen muligheter forts. class Maanedsdata { Dagdata[] dagdata = new Dagdata[31]; int antdager; // Antall dager i måneden class Stasjon { Maanedsdata[] mdata = new Maanedsdata[6]; Hvordan programmere med objekter? Grunnregel: Et objekt skal inneholde data og operasjoner som naturlig hører sammen. Et objekt kan representere: et objekt i problemdomenet: En konto, en bil, en student, et lån, en eiendom (brukes til å definere en datamodell en "modell av virkeligheten") et objekt av mer programteknisk art: Et skjermvindu, en fil, en tekststreng, en tabell (slike objekter er vanligvis ikke del av datamodellen det er bare en effektiv måte å gruppere sammen programelementer som hører sammen) 31 32

Brukes til å holde orden på en samling objekter Alternativ til arrayer Akkurat som for arrayer kan man: legge inn nye objekter finne tilbake til et objekt som er lagt inn fjerne et objekt som er lagt inn løpe gjennom alle objektene i tabellen Viktig forskjell mellom arrayer og HashMap: HashMap I en array legger vi inn objekter i en bestemt posisjon, og vi må gå tilbake til denne posisjonen/indeksen når vi senere skal se på objektet. Indeksen er et heltall mellom 0 og length-1. I en HashMap oppgir vi en bestemt nøkkel (vanligvis en tekststreng) når vi legger vi inn et nytt objekt, og vi oppgir denne nøkkelen når vi senere skal se på objektet. Dvs. indeksen er en tekststreng. 33 Eksempel på bruk av HashMap Importer pakken java.util import java.util.*; class BrukAvHashMap { public static void main (String[] args) { HashMap h = new HashMap(); Opprett en HashMap String fnr1 = 30128812344"; Person per1 = new Person(fnr1, "Harald Olsen"); h.put(fnr1, per1); Legg inn Person-objekt i HashMap en String fnr2 = 14109512547"; Person per2 = new Person(fnr2, Lena Torsen"); h.put(fnr2, per2); Legg inn Person-objekt i HashMap en Person p = (Person) h.get( 30128812344 ); Hent Person-objekt fra HashMap en class Person { String adresse; Person(String navn, String adresse) { this.navn = navn; this.adresse = adresse; 34 Opprette en HashMap Legge inn objekt i HashMap I starten av programmet: import java.util.*; Dette importerer pakken java.util hvor bl.a. klassen HashMap ligger. I klassen eller metoden som skal bruke HashMap'en: HashMap h = new HashMap(); NB: Hvis tabellen skal brukes av flere metoder i en klasse, deklareres variabelen ovenfor i starten av klassen (som en objektvariabel). Hvis tabellen kun skal brukes av en enkelt metode, er det naturlig å deklarere variabelen ovenfor inni den aktuelle metoden. 35 Et hvilket som helst objekt i Java kan legges inn i en HashMap Når vi legger et objekt inn i HashMap'en, må vi samtidig oppgi en nøkkel, dvs en tekststreng som entydig identifiserer objektet. Vi trenger denne nøkkelen dersom vi senere skal finne eller fjerne objektet i HashMap'en. Eksempel: String fnr = 30126512345 ; Person p = new Person(fnr, Kari Olsen ); h.put(fnr, p); Her lager vi først et Person-objekt (med passende argumenter) og legger det deretter inn i tabellen med fødselsnummeret som nøkkel. 36

Hente objekt fra HashMap Dersom vi legger inn flere objekter med samme nøkkel, er det bare det sist innlagte objektet som blir liggende i tabellen (de andre overskrives): Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person(); String navn = "Jens"; h.put(navn, p1); // p1 legges inn h.put(navn, p2); // p2 legges inn og p1 overskrives h.put(navn, p3); // p3 legges inn og p2 overskrives Noen ganger må vi konstruere en nøkkel ut fra flere variable for å få entydighet: String lengdegrad = "67.3"; String breddegrad = "53.3"; String posisjon = lengdegrad + ";" + breddegrad; Fjelltopp fjell = new Fjelltopp(posisjon, Bjørnefjell ); h.put(posisjon, fjell); For å hente et objekt med utgangspunkt i nøkkelen: // Vi vil finne en person ut fra fødselsnummeret: Person p = (Person) h.get(fnr); Legg merke til at vi i starten må skrive i parentes navnet på klassen som objektet tilhører - i dette tilfellet klassen Person. Årsaken er at HashMap'en ikke holder rede på hvilken klasse objektene som legges inn har - bare at det er objekter. Når objektene hentes ut må vi derfor "minne Java på" hvilken klasse objektet var av (dette er egentlig et møte med en avansert og svært nyttig mekanisme i objektorienterte språk som kalles arv og som blir tatt opp i INF1010). Merk: å hente et objekt fra en HashMap slik som over medfører ikke at objektet fjernes fra HashMap'en. 37 38 Fjerne objekt fra HashMap For å fjerne et objekt med gitt fødselsnummer som nøkkel: h.remove(fnr); Dersom det ligger et objekt i HashMap'en med den gitte nøkkelen, blir objektet fjernet og setningen ovenfor returnerer med en peker til objektet som fjernes. Dersom det ikke ligger et objekt i HashMap'en med den gitte nøkkelen, returnerer setningen ovenfor verdien null. 39