Sunteți pe pagina 1din 32

Structuri de Date n Java (IV)

Vectori n Java: excepii, clonare Colecii: adugare, tergere, nu rare, !u"ionare, clonare #i$te nlnuite: creare, odi!icare noduri, tergere, duplicare #i$te du%lu nlnuite Co paraie de per!or ane ntre li$te i vectori

Vectori Java

cla$e colecii ' $toc(ea" o%iecte de acelai !el un vector ' $ecven cu un anu it nu r de co ponente
int[] scores; // scores este tot o // variabil referin! // ce valoare are scores? // se aloc un array cu 4 // componente ntregi scores = new int [4]; scores lengt!; // 4

) -./

&& -1/

1* -&/

+, -0/

$core$ -./ -1/ -&/ & -0/

1xcepii !olo$ite de vectori


2ull3ointer1xception ' varia%il vector nealocat (null) 4rra5Index6ut6!7ound$ ' de exe plu acce$ la $core$-81/

int[] scores; int[] e"ams; scores = new int [4]; #ystem out println $scores lengt!%; scores[&] = '; scores[(] = )); scores[)] = (*; scores[+] = ,-; e"ams = scores;

$core$ exa $ 0 ) -./ && -1/ 1* -&/ +, -0/

Clonarea vectorilor
:eali"ea" o copie per!ect !r a a!ecta originalul ;oate o%iectele Java au acea$t etod clone() <etoda clone() ntoarce ntotdeauna o re!erin la 6%=ect

int[] scores; int[] e"ams;

$core$

) -./ ) -./

&& -1/ && -1/

1* -&/ 1* -&/

+, -0/ +, -0/

scores = new int [4]; scores[&] = '; scores[(] = )); exa $ scores[)] = (*; scores[+] = ,-; e"ams = $int[]% scores clone $%; // necesit conversie e"plicit!

;e$te cu vectori
// test (. care este cel mai mic respectiv cel mai mare in/e" permis ? int[] b = new int[4)]; // test ). ce se afi0ea1? int[] a2 b; a = new int [(&]; a[,] = (; b = a; a[,] = 4); #ystem out println $b[,]%; // test +. i/em int[] a2 b; a = new int [(&]; a[,] = ); b = $int[]% a clone $%; a[,] = 4); #ystem out println $b[,]%;

I ple entarea unei colecii

Colecia de ntregi tre%uie $ per it: $tocarea ntregilor ntr8un vector adugarea unui ele ent tergerea unui ele ent anu e a!larea nu rului total de ele ente deter inarea nu rului de ele ente egale cu un ele ent dat !u"ionarea cu alt colecie
,

De!inirea cla$ei
>> cla$a va i ple enta inter!ata Clonea%le pentru a $uporta duplicarea public class Int4rra57ag implements Clonea%le ? >> aici $toc ntregii private int-/ data@ >> cAi ntregi $unt n colecie ($paiul di$poni%il e p$trat n BBB C) private int an5Ie $@ >> etodele pu%lice pe care vo >> BBB D ) expune pe $lide8urile ur toare

Con$tructorii
public Int4rra57ag (int initialCapacit5) ? if (initialCapacit5 F .) throw new Illegal4rgu ent1xception (Ginitial capacit5 F .H)@ an5Ite $ I .@ data I new int -initialCapacit5/@ D public Int4rra57ag (void) ? an5Ite $ I .@ data I new int -,/@ D >> con$tructorii au gri= $ pun >> ceva valid n varia%ilele >> e %re

en$ureCapacit5
public void en$ureCapacit5 (int inu u Capacit5) ? int %igger4rra5 -/@ if (dataBlengt( F ini u Capacit5) ? %igger4rra5 I new int - ini u Capacit5/@ S5$te Barra5cop5 (data, ., %igger4rra5, ., an5Ite $)@ data I %igger4rra5@ an5Ite $ D

data

& -./

) -1/ 0 -0/

* -&/

0 -0/ -9/ -+/

%igger4rra5

& -./

) -1/ *

* -&/

-9/

-+/

-,/

-)/

4dugarea
public void add (int ele ent) ? if ( an5Ite $ II dataBlength) ? >> du%lea" capacitatea i adaug un ele ent >> dac an5Ite $ J & K 1 L IntegerB<4MNV4#O1, va apare >> o depire arit etic i operaia euea" en$ureCapacit5 ( an5Ite $ J & K 1)@ D

an5Ite $ * -&/

data- an5Ite $/ I ele ent@ an5Ite $ KK@ D >> de exe plu xBadd ())@

9+ ) -9/ -+/

data

0 -./ 1.

+ -1/

E -0/

Ptergerea
public boolean re ove (int target) ? >> caut locaia ele entului n arra5@ dac nu e$te g$it, ntoarce index I .@ while (index FI an5Ite $ QQ target RI data-index/ ) index KK@ if (index RI an5Ite $) ? >> $8a g$it ele entul data-index/ an5Ite $ 88@ data-index/ I data- an5Ite $/@ return true@ D >> nu $8a g$it un ele ent target data return false@ D an5Ite $

an5Ite $ 0 -./ + * E -0/

+9 ) -9/ -+/

) -1/ -&/

11

2u rarea duplicatelor
public int count6ccurence$ (int target) ? int an$Ser@ int index@ an$Ser I .@ for (index I . @ index F an5Ite $ @ index KK) if (target II data-index/) an$Ser KK@ return an$Ser@ D
1&

Tu"ionarea cu alt colecie


public void add4ll (Int4rra57ag vec) ? >> dac vec e$te null, $e arunc o excepie >> de tip 2ull3ointer1xception en$ureCapacit5 ( an5Ite $ K vecB an5Ite $)@ S5$te Barra5cop5 ( vecBdata, ., data, D
de unde unde 10 cAte ele ente

an5Ite $, vecB an5Ite $)@

an5Ite $ KI vecB an5Ite $@

On alt

od de !u"ionare

public static Int4rra57ag add (Int4rra57ag %1, Int4rra57ag %&) ? >> dac %1 $au %& $unt null, $e arunc o excepie int t I %1BgetCapacit5 () K %&BgetCapacit5 ()@ Int4rra57ag an$Ser I new Int4rra57ag (t)@ an$SerB an5Ite $ I %1B an5Ite $ K %&B an5Ite $@ S5$te Barra5cop5 (%1Bdata, ., an$SerBdata, ., %1B an5Ite $)@ S5$te Barra5cop5 ( >> de$tinaie, $ur$, nu r %&Bdata, ., an$SerBdata, %1B an5Ite $, %&B an5Ite $)@ return an$Ser@ D 19

Clonarea
public 6%=ect clone () ? Int4rra57ag an$Ser@ try ? >> clon o%iectul %it cu %it an$Ser I (Int4rra57ag) $uperBclone ()@ D catch (Clone2otSupported1xception e) ? throw new :unti e1xception (G!orgot to i ple ent Clonea%leH)@ D >> n noul o%iect ave aceeai re!erin@ tre%uie $ clon i arra58ulR >> dac nu o !ace , vo avea arra58ul co un n cele dou o%iecte an$SerBdata I (int -/) dataBclone ()@ return an$Ser@ D

1+

1!ecte colaterale ale clonrii

o%iectul iniial
data & -./ )

an5Ite $ * -&/ 0 -0/

-1/

-9/ 9

-+/

dup clonare
data & -./ an$SerBdata ) -1/

an5Ite $ * -&/ 0 -0/

-9/ 9

-+/

an$SerB an5Ite $ 1,

;e$te cu Int4rra57ag
// test (. cum va arta colecia? 3nt4rray5ag bag = new 3nt4rray5ag $(&%; bag a// $(%; bag a// $)%; bag a// $+%; bag remove $(%; // test ) // ce se nt6mpl /ac2 a/ugn/ elemente2 // /ep0im cele (& locaii prealocate ? // // // // test + cum se scrie folosin/ #ystem arraycopy copierea a (& elemente /e la nceputul array7ului " n array7ul y2 ncepn/ /e pe po1iia a ,7a ?

1)

#i$te nlnuite
Tolo$it la $tocarea ordonat a ele entelor Tiecare ele ent e$te conectat de ele entul ur tor printr8o legtur (linV) #i$ta $e poate parcurge doar ergnd din ele ent n ele ent Tiecare nod e$te alctuit dintr8o perec(e (FvaloareL, Flegtura $pre ele entul ur torL)

1&

19 1E

89

1.

Cla$a Int2ode
4%$tracti"ea" lucrul cu noduri ale li$te 6!er $uport pentru: crearea nodurilor odi!icarea valorii unui nod adugarea $au tergerea unui nod din li$t nu rarea nodurilor din li$t cutarea unui nod dup valoare duplicarea li$telor

1*

Cla$a Int2ode
public class Int2ode ? private int data@ private Int2ode linV@ >> BBB D >> li$ta $e p$trea" prin e orarea re!erinelor ctre >> pri ul ele ent, denu it head i ulti ul, denu it tail Int2ode (ead@ (ead Int2ode tail@ >> valoare >> legatura $pre nodul ur tor

re!erina null

tail

1&

19 &.

89

1.

Con$tructorul cla$ei
>> $e iniali"ea" varia%ilele e %re public Int2ode (int val, Int2ode lV) ? data I val@ linV I lV@ D >> de exe plu, aa ar putea arta crearea pri ului nod al li$tei Int2ode (ead I new Int2ode (9&, null)@

(ead

9&

&1

<etode acce$ i
public int getData () ? return data@ D public Int2ode get#inV () ? return linV@ D public void $etData (int val) ? data I val@ D public void $et#inV (Int2ode lV) ? linV I lV@ D

odi!icare a $trii

&&

4dugarea la nceputul li$tei


(ead I neS Int2ode (+, (ead)@ Tuncionea" i dac iniial $e pornete cu li$ta vid ((ead II null)

(ead

1&

19 &0

89

1.

Stergerea pri ului nod


(ead I (eadBget#inV ()@ re!erina ctre (!o$tul) pri ul nod $e nu $e ai p$trea" nicieri $i$te ul recunoate ace$t lucru i va recupera $paiul (gar%age collector)

(ead

1&

19 &9

89

1.

4dugarea unui nod dar nu la nceput


public void add2ode4!ter (int val) ? linV I new Int2ode (val, linV)@ D
nod curent (ead 0

1&

19 &+

89

1.

Ptergerea unui nod care nu e$te la nceput


public void re ove2ode4!ter() ? linV I linVBlinV@ D >> ce $e ntA pl dac >> linV e$te nullC
(ead nod curent

1&

19

89

1.

&,

Deter inarea lungi ii li$tei


public static int li$t#engt( (Int2ode (ead) ? Int2ode cur$or@ int an$Ser@ an$Ser I .@ for (cur$or I (ead @ cur$or RI null @ cur$or I cur$orBlinV ) an$Ser KK@ return an$Ser@ D
&)

Cutarea n li$t a unui ele ent de o valoare anu e


public static Int2ode li$tSearc( (Int2ode (ead, int target) ? Int2ode cur$or@ for (cur$or I (ead @ cur$or RI null @ cur$or I cur$orBlinV) i! (target II cur$orBdata) return cur$or@ return null@ D
&E

Cutarea n li$t a unui nod de pe o po"iie dat


public static Int2ode li$t3o$ition (Int2ode (ead, int po$ition) ? Int2ode cur$or@ int i@ i! (po$ition FI .) return null@ cur$or I (ead@ for (i I 1 @ i F po$ition QQ cur$or RI null @ i KK) cur$or I cur$orBlinV@ return cur$or@ D
&*

Copierea unei li$te


public static Int2ode li$tCop5 (Int2ode $ource) ? Int2ode cop5Xead, cop5;ail@ >> crearea pri ului nod cop5Xead I new Int2ode ($ourceBdata, null)@ cop5;ail I cop5Xead@ >> copierea re$tului li$tei while ($ourceBlinV RI null) ? $ource I $ourceBlinV@ cop5;ailBadd2ode4!ter ($ourceBdata)@ cop5;ail I cop5;ailBlinV@ D >> $e poate utili"a clonarea >> pentru duplicarea li$teiC return cop5Xead@ D

0.

#i$te du%lu nlnuite


public class Dou%le#inVed#i$t ? private int data@ private Dou%le#inVed2ode %acV@ private Dou%le#inVed2ode next@ >> BBB D
(ead tail

1&

89 01

1.

Co paraie a per!or anelor


dac ele entele $unt acce$ate la ntA plare, arra58ul e$te ai rapid dac ele entele $unt acce$ate unul dup altul, Yla rAndY, e$te ai avanta=oa$ o li$t nlnuit, ai ale$ pentru in$erri la ur redi en$ionarea e$te ine!icient pentru arra5@ la o li$t, $e adaug un ele ent nou la coad pentru depla$area n a %ele direcii, !olo$i o li$t du%lu8nlnuit

0&

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