Documente Academic
Documente Profesional
Documente Cultură
Java Curs 4
Java Curs 4
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/
int[] scores; int[] e"ams; scores = new int [4]; #ystem out println $scores lengt!%; scores[&] = '; scores[(] = )); scores[)] = (*; scores[+] = ,-; e"ams = scores;
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
$core$
) -./ ) -./
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[,]%;
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/
* -&/
%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 $
+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&
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+
o%iectul iniial
data & -./ )
-1/
-9/ 9
-+/
dup clonare
data & -./ an$SerBdata ) -1/
-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
&&
(ead
1&
19 &0
89
1.
(ead
1&
19 &9
89
1.
1&
19 &+
89
1.
1&
19
89
1.
&,
0.
1&
89 01
1.
0&