Sunteți pe pagina 1din 31

Structuri de Date n Java (VI)

Interfaa Map Metodele caracteristice ale Map Pericolele modificrii cheilor Prevenirea alterrii cheii Modificarea copiei !hei nemodifica"ile Pro#$%uri nemodifica"ile pentru chei &n'hearea cheilor !omparare (i sortare Interfaa !ompara"le Interfaa !omparator Set%uri sortate Stive) !o*i

Interfaa Map

,eali*ea* maparea ntre un set de chei (i un set de valori - perechi de tip (.e$/ value)

Pentru fiecare o"iect cheie avem un o"iect valoare corespondent


0ste n esen un instrument de tip 1loo.up2 !heile tre"uie s fie unice/ ns valorile nu
+

4tenie Map nu este o !ollection

Map nu suport boolean add (!eva c)5 boolean contains (6"7ect o"7)5 &ns suport boolean put (8ip!heie .e$/ 8ipValue val)5 boolean contains9e$ (8ip!heie .e$)5 boolean containsValue (8ipValue val)5
3

0#emplu de folosire a lui Map


Map;Strin'/ Strin'< dns = new >ashMap;Strin'/ Strin'< ()5 dns)put (?ve'a)unit"v)ro?/ ?1@+)1AB)1)1?)5 S$stem)out)println (dns)'et (?ve'a)unit"v)ro?))5 S$stem)out)println (dns)contains9e$ (?ve'a)unit"v)ro?))5 S$stem)out)println (dns)containsValue (?1@+)1AB)1)1?))5 dns)remove (?ve'a)unit"v)ro?)5 S$stem)out)println (dns)containsValue (?1@+)1AB)1)1?))5 CC 11@+)1AB)1)12/ true/ true/ false
:

4lte metode utile

.e$Set() % returnea* un Set cu toate cheile values() % returnea* o !ollection cu toate valorile entr$Set() % returne* un set de perechi (.e$/value) fiecare pereche este un o"iect Map)0ntr$ Map)0ntr$ suport 'et9e$/ 'etValue/ setValue orice schim"are n Map se reflect n Set
D

Pericolele modificrii cheilor


6 cheie tre"uie s rmEn e'al cu ceea ce a fost nainte (n sensul metodei eFuals)

Seamn cu situaia de la Set%uri

Dac o cheie se schim"/ ea mpreun cu valoarea asociat vor fi 1pierdute2

Holosire incorect
Iame daniela = new Iame (?Daniela?/ ?!or"oteanu?)5 Map;Iame/ Strin'< catalo' = new >ashMap;Iame/ Strin'< ()5 catalo')put (daniela/ ?JG:J%1+3%:DA?)5 S$stem)out)println (catalo')'et (daniela))5 daniela)first = ?Ionel?5 S$stem)out)println (catalo')'et (daniela))5 catalo')put (new Iame (?Daniela?/ ?!or"oteanu?)/ ?JG:J%DDD%1+3?)5 daniela)first = ?Daniela?5 S$stem)out)println (catalo')'et (daniela))5 G

Dou rspunsuri

,spunsul corect CC JG:J%1+3%:DA/ null/ JG:J%DDD%1+3 ,spunsul (i mai corect Iu contea* pentru c nu ar tre"ui s facem acest lucru !omportare impredicti"l
B

!um s prevenim modificarea cheiiK

Dorim s putem modifica un o"iect din Map Dar o"iectele cu chei modifica"ile sunt periculoase

!opierea cheii
Iame daniela = new Iame (1Daniela2/ 1!or"oteanu2)5 Iame cop$ = new Iame (daniela)first/ daniela)last)5 map)put (cop$/ 1JG:J%DDD%1+32)5

4cum schim"rile n o"iectul daniela nu *pcesc map%ul Dar cheile n sine tot pot fi modificate for (Iame name map).e$Set ()) L name)first = 1 am "u(it cheia25 CC n%am re*olvat nimic M 1J

Hacem cheile nemodifica"ile


public class Iame L public final Strin' first5 public final Strin' last5 public Iame (Strin' first/ Strin' last) L this)first = first5 this)last = last5 M public boolean eFuals (6"7ect o) L return (o instanceof Iame NN ((Iame) o))first)eFuals (this)first) NN ((Iame) o))last)eFuals (this)last))5 M M
11

Pro#$%uri nemodifica"ile pentru chei


Map;Strin'/ Strin'< dir = new >ashMap;Strin'/ Strin'< ()5 Iame daniela = new Iame (1Daniela2/ 1!or"oteanu2)5 Strin' .e$ = daniela)first O 1/2 O daniela)last5 catalo')put (.e$/ 1JG:J%DDD%1+32)5

Strin'%urile sunt nemodifica"ile/ deci Map%ul va fi prote7at


1+

Ioiunea de pro#$
1Pn pro#$/ n forma sa cea mai 'eneral/ este o clas funcionnd ca o interfa ctre altceva) 4cel altceva poate fi orice o cone#iune de reea/ un o"iect de dimensiune mare n memorie/ un fi(ier sau orice alt resurs care este scump de folosit sau imposi"il de duplicat)2 (Qi.ipedia)
13

1&n'hearea2 cheilor
public class Iame L private Strin' first5 private Strin' last5 private boolean fro*en = false5 CC R public void setHirst (Strin' s) L if (Sfro*en) first = s5 M CC R la fel pentru setTast public void free*e () L fro*en = true5 M M CC nemodifica"ile din afara clasei

CC metod mutator controla"il

1:

,e*umat modificarea cheilor


Hiecare a"ordare vine cu anumite de*avanta7e Pentru fiecare situaie ale'em a"ordarea cea mai simpl (i mai la ndemEn pe principiul c ce e simpu/ "ine structurat/ e previ*i"il (i deci u(or de depanat Dac o cheie nu poate fi niciodat modificat/ atunci nu vom avea niciodat pro"leme cu ea Iu scriei o implementare pe care nu o nele'ei deplin decEt ca un ultim refu'iu Dac ni se pare complicat de scris nseamn c nu ne%am 'Endit ndea7uns de mult la pro"lem

1D

!omparare (i sortare
Holosite pentru a decide/ ntre dou o"iecte/ dac unul este mai mare decEt cellalt

(a)compare8o (")) tre"uie s 'enere*e ; J dac a ; " = J dac a = " < J dac a < "
1A

0#emplu de comparare
Inte'er one = 15 S$stem)out)println (one)compare8o (3))5 S$stem)out)println (one)compare8o (%DJ))5 Strin' fran. = 1Hran.25 S$stem)out)println (fran.)compare8o (1Uooth2))5 S$stem)out)println (fran.)compare8o (1>opper2))5 CC %1/ 1/ :/ %+
1G

Sortarea alfa"etic
Tist;Strin'< names = new 4rra$Tist;Strin'< ()5 names)add (1Sailor2)5 names)add (1Tula2)5 names)add (1Uo""$2)5 names)add (1Santos2)5 names)add (1Dell2)5 !ollections)sort (names)5 CC names V 1Uo""$2/ 1Dell2/ 1Tula2/ 1Sailor2/ 1Santos2 W
1B

Interfaa !ompara"le
Putem compara Strin'%uri pentru c ele implementea* interfaa !ompara"le

4ltfel spus/ Strin'%urile definesc o 1ordine natural2

Pentru a face clasa Ceva compara"il/ tre"uie s implementm int compare8o (Ceva c)5

1@

Iame%urile devin compara"ile


public class Iame implements !ompara"le;Iame< L CC R public int compare8o (Iame o) L int compare = this)last)compare8o (o)last)5 if (compare S= J) return compare5 else return this)first)compare8o (o)first)5 M M
+J

0#emplu de list sortat de Iame%uri


Tist;Iame< names = new 4rra$Tist;Iame< ()5 names)add (new Iame (?Iicolas?/ ?!a'e?))5 names)add (new Iame (?Taura?/ ?Dern?))5 names)add (new Iame (?>arr$?/ ?Stanton?))5 names)add (new Iame (?Diane?/ ?Tadd?))5 names)add (new Iame (?Qilliam?/ ?Mor'an?))5 names)add (new Iame (1Dirt$2/ ?Xlover?))5 S$stem)out)println (names)5 !ollections)sort (names)5 S$stem)out)println (names)5 CC V Iicolas !a'e/ Taura Dern/ Dirt$ Xlover/ Diane Tadd/ CC Qilliam Mor'an/ >arr$ Stanton W +1

Interfaa !omparator
Pentru a crea mai multe ordini de sortare pentru un anumit tip/ vom defini clase !omparator

Pn !omparator prime(te dou o"iecte (i decide care este mai mare


Pentru tipul Ceva/ un !omparator;Ceva< are int compare (Ceva o1/ Ceva o+)5
++

Pn !omparator dup prenume


public class HirstIameHirst implements !omparator;Iame< L public int compare (Iame n1/ Iame n+) L int ret = n1)first)compare8o (n+)first)5 if (ret S= J) return ret5 else return n1)last)compare8o (n+)last)5 M M

4tenie/ compararea se face altfel decEt n ca*ul !ompara"le


+3

0#emplu de !omparator
Tist;Iame< names = new 4rra$Tist;Iame< ()5 CC )) !omparator;Iame< first = new HirstIameHirst ()5 !ollections)sort (names/ first)5 S$stem)out)println (names)5 CC V Diane Tadd/ Dirt$ Xlover/ >arr$ Stanton/ Taura Dern/ CC Iicolas !a'e/ Qilliam Mor'an W

Sortarea se face folosind comparatorul tocmai creat


+:

Seturi sortate

8reeSet - o colecie de o"iecte meninut mereu sortat Hie 6"7ect%urile din 8reeSet tre"uie s implemente*e !ompara"le Sau se furni*ea* un o"iect !omparator la crearea lui 8reeSet

SortedSet;Iame< names = new 8reeSet;Iame< (new HirstIameHirst ())5 names)add (new Iame (?Taura?/ ?Dern?))5 names)add (new Iame (?>arr$?/ ?Stanton?))5 names)add (new Iame (?Diane?/ ?Tadd?))5 S$stem)out)println(names)5 CC V Diane Tadd/ >arr$ Stanton/ Taura DernW

+D

Stiv (stac.)
Structur de date "a*at pe principiul TIH6 (Tast In Hirst 6ut)/ n care accesul la elemente se face numai pe la un sin'ur capt denumit vErf

Se scoate ntotdeauna elementul de deasupra Se pune peste elementul de deasupra


+A

!lasa Stac.
Implementea* interfaa !ollection Metodele clasei Stac.;E< boolean empt$ () E pee. () % inspectea* fr (ter'ere E pop () % scoatere cu (ter'ere E push (0 e) % introducere int search (6"7ect o) - adEncimea lui o n stiv Se arunc 0mpt$Stac.0#ception dac se face pop sau peek pe o stiv 'oal

+G

6 propo*iie ntoars pe dos


Strin' line = new Strin' (?epurasul usa rupe?)5 Stac.;!haracter< sc = new Stac.;!haracter< ()5 for (int i = J 5 i ; line)len'th () 5 i OO) sc)push (line)char4t (i))5 Strin' reverse = new Strin' ()5 while (sc)si*e () < J) reverse O= sc)pop ()5 S$stem)out)println (reverse)5 CC 1epur asu lusarupe2
+B

!oad (Fueue)
6 colecie de elemente a(e*ate n ordine pentru care adu'area se face ntotdeauna la sfEr(it iar e#tra'erea se face de la nceput

Principiul HIH6 (Hirst In Hirst 6ut)


remove +@ add

!lasa Tin.edTist
Implementea* interfeele !ollection (i Yueue Metodele interfeei Yueue;0< boolean add (0 e) - adu'are la sfEr(it 0 element () % inspecarea nceputului boolean offer (0 e) - adu'are fr aruncare e#cepie 0 pee. () % inspectare fr aruncare e#cepie 0 poll () % o"inerea captului/ fr aruncare e#cepie 0 remove () % (ter'erea captului Se arunc IoSuch0lement0#ception dac coada este 'oal (i se ncearc e#tra'erea unui element din ea (element/ peek/ remove)

3J

Pn palindrom
Strin' line = ?copac?5 Stac.;!haracter< sc = new Stac.;!haracter< ()5 Tin.edTist;!haracter< llc = new Tin.edTist;!haracter< ()5 for (int i = J 5 i ; line)len'th () 5 i OO) L sc)push (line)char4t (i))5 llc)add (line)char4t(i))5 M Strin' palindrom = new Strin' ()5 while (llc)si*e() < J) palindrom O= llc)remove ()5 while (sc)si*e () < J) palindrom O= sc)pop ()5 S$stem)out)println (palindrom)5 CC 1copaccapoc2

31

S-ar putea să vă placă și