You are on page 1of 38

THC HNH CU TRC D LIU V THUT GII (bng JAVA) 1- H ng !"n #$%ng &' ($%ng ()*n +,-# #.

# / 0 J1&1
JAVA l ngn ng lp trnh dng i tng. Cc lp java l t ng !"t h# c$a %i&" d li'"( r)t ph hp & *inh h+a cc %i&" d li'" tr," tng c- ./n th0ng g1p. 23i java.util 4 5nh ngh6a 78n *9t %h"ng %i:n tr;c cc lp <c9t tri= v cc gia# di'n > ?nt@rAac@ <c9t ph/i= & ng0i lp trnh ti'n 7B dCng v pht tri&n thD* cc lp <E cc %i&" d li'" tr," tng= c$a *nh. Fi GH trIch 7- J %h"ng %i:n tr;c c$a Java C#ll@cti#n7 Kra*@L#r% W.j@ct A.7tractC#ll@cti#n XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC#ll@cti#n A.7tractYi7t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYi7t A.7tractZ@!"@ntialYi7t Yin%@dYi7t XXXXXXXXXXXX ArraHYi7t XXXXXXXXXXXXXXXXXXXXXXXX V@ct#r XXXXXXXXXXXXXXXXXXXXXXXXXX Ztac% A.7tractZ@t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ@t [a7hZ@t Mr@@Z@t XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ#rt@dZ@t A.7tract\ap XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ap [a7h\ap Mr@@\ap XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZ#rt@d\ap ]@a%[a7h\ap ArraH7 ^itZ@t C#ll@cti#n7 Ficti#narH [a7hta.l@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\ap _r#p@rti@7

Hnh 1: Mt phn khung kin trc ca cc lp Java

MNi 5a chO httpPQQLLL.d#cjar.c#*Qd#c7QapiQjavaQ"tilQ c3 RH $ ti li'" <javad#c= vS cc lp( cc gia# di'n nH v cTng ch# phUp t/i vS *4 ng"Jn & tha* %h/#.

2- 34+ 56 /% 7 ($) /80 +,9n$ bng :1&1


2.1.T ch!c cc lp" cc gia# $i%n v& cc g'i

a X `:" *9t ch-ng trnh %hng ln( chO gJ* *9t vi lp th c3 th& t chac thnh *9t g3i. M#n .9 *4 ng"Jn 7b nc* tr#ng *9t t'p( tDn t'p ph/i trng tDn lp pu(lic. Cc lp cdn lNi %hng c l pu(lic. Cc lp S" nc* tr#ng g3i nH v g3i c3 th& c3 tDn h#1c %hng tDn <%hng c3 cG" l'nh pac%ag@ etDn g3if g R" t'p= . X `:" pht tri&n *9t ch-ng trnh java ln( 7b c3 r)t nhiS" lp v gia# di'n <int@rAac@= c3 liDn !"an :n nha". `:" %hng t chac tt th 7b r)t %h3 th@# dhi. CRn ph/i tN# *9t J n <pr#j@ct=. \9t J n gJ* nhiS" t'p( c3 nhiS" lp( c t chac tr#ng cc g3i <pac%ag@=. \ii t'p chaa *9t h#1c vi lp. _h/i c3 *9t lp chInh( chaa h* )ain l li v# c$a ch-ng trnh. Yp chInh ph/i l pu(lic v tDn lp chInh ph/i trng tDn t'p. Cc t'p th"9c *9t J n ch-ng trnh th0ng 1t tr#ng cng *9t th *Cc. Mrnh .iDn d5ch 7b tN# ra cc t'p *4 .Ht@Xc#d@ ch# *ii lp vi "i .cla**. Mr#ng t'p chInh 7b ph/i c3 l'nh nhp <*p#rt= cc lp phC tr %hc( 1t tr#ng nhng g3i. Cc g3i cTng c t chac th@# c)" tr;c phGn c)p hnh cGH. \ii g3i l *9t th *Cc. C)" tr;c phGn c)p cc g3i ph/i %hp vi c)" tr;c cGH th *Cc. j& 7B dCng *9t lp haH *9t gia# ti:p tr#ng g3i %hc( c3 k cchP X Mr"H cp :n .cng tDn RH $ etDn g3if.etDn lpf X `hp %hl" lp haH gia# ti:p 3 .cng cG" l'nh i)p#rt etDn g3if.etDn lpf g R" t'p. X `hp %hl" t#n .9 g3i chaa lp haH gia# ti:p 3 .cng cG" l'nh i*p#rt g R" t'p. Za" %hi 4 i*p#rt th tr#ng cc cG" l'nh %hng cRn vi:t tDn RH $ na. C3 .a dNng cG" l'nh i)p#rt & nhp v# 7B dCng cc lp h#1c gia# di'n 4 %hai .# tr#ng *9t g3i %hc.
import packageName.className; import packageName.interfaceName; import packageName.*;

FNng c"i cng c$a cG" l'nh i*p#rt vi %I tm Ni di'n n c3 ngh6a l nhp t)t c/ cc lp v gia# ti:p tr#ng g3i. Ch; o rcng ph/i thi:t lp cla** path & trnh .iDn d5ch v thng d5ch t* th)H t'p ng"Jn( t'p .Ht@Xc#d@ c$a lp haH gia# ti:p * ta i)p#rt. 2.2 +, $- t ch!c ./ n v& cc g'i ch# )t (&i th0c h&nh Cc .i thmc hnh HD" cR" l* cc ch-ng trnh %hng ln( h#n t#n c3 th& chO cRn *9t g3i %hng tDn nh tr0ng hp a= nD" trDn. M"H nhiDn & h+c tp ph#ng cch t chac ch-ng trnh java( nDn t chac thnh J n( gJ* nhiS" g3i( nhiS" t'p nh n3i tr#ng tr0ng hp .. 1hu2n c#P nDn 7B dCng Eclipse > *i tr0ng pht tri&n tIch hp ch# Java.
p

^i thmc hnh V > `gqn r:p. X \g *9t J n <pr#j@ct=( 1t tDn l 3tack4rj. Mhi:t lp c)" hnh J n & t)t c/ cc t'p liDn !"an 7b nc* tr#ng th *Cc c3 tDn 3tack4rj. X MN# *9t g3i vi tDn )23tack & chaa lp c3 cc ph-ng thac d# ta rGH dmng th@# cc .i tp s(t(u(v(w. X M'p T5*t3tack.java chaa h* )ain & t@7t cc ph-ng thac ch"ln c$a Ztac% d# java l* 78n cTng nh t@7t cc ph-ng thac d# ta rGH dmng. M'p nH c3 th& nc* tr#ng g3i )2T5*t3tack h#1c -n gi/n h-n l g3i %hng tDn. X Cc t'p l* .i thmc hnh p(k(x cTng & tr#ng g3i )2T5*t3tack h#1c -n gi/n h-n l g3i %hng tDn. ^i thmc hnh p > [ng i X \g *9t J n <pr#j@ct=( 1t tDn l 6u5u54rj. Mhi:t lp c)" hnh J n & t)t c/ cc t'p liDn !"an 7b nc* tr#ng th *Cc c3 tDn 6u5u54rj. X MN# *9t g3i vi tDn )26u5u5 & chaa cc lp( cc gia# ti:p d# ta rGH dmng 5nh ngh6a tr#ng cc t'p y"@"@.java( A.7tracty"@"@.java( ArraHy"@"@.java( Yin%@dy"@"@.java z X Cc t'p T5*t . . . .java chaa h* )ain & t@7t cc lp( cc ph-ng thac d# ta rGH dmng. VI dC t'p T5*t7rra26u5u5.java & t@7t 7rra26u5u5{ t'p T5*t8ink5$6u5u5.java & t@7t 8ink5$6u5u5 . . .( c3 th& nc* tr#ng g3i )2T5*t6u5u5 h#1c -n gi/n h-n l g3i %hng tDn. X Cc ph-ng thac d# ta rGH dmng th@# cc .i tp k(x(s(t(u cTng a v# g3i )26u5u5 .cng cch . 7"ng thD* v# t'p 6u5u5.java. Cc .i ti:p th@# t chac t-ng tm. 2.9 6u2 :c .;t t<n C9ng Jng pht tri&n java S ra v t"Gn th$ nhng !"H c thng nh)t nhc* l* ch# vi'c rGH dmng ch-ng trnh d| dng h-n( +c ti li'" d| hi&" h-n. \9t tr#ng cc !"H c l vS 1t tDn <na*ing=. Mrc h:t nDn ch+n tDn 7a# ch# g+i nh ch,nh =c n9i d"ng( %hng dng ch vi:t t}t <tr, %hi r)t thng dCng X v th:( cc tDn tr#ng java th0ng di=. Zm phGn .i't nhiS" %hi r)t tinh t:. VI dCP X _h-ng thac i*>)pt2 P tr/ vS %:t !"/ ;ngQ7ai c$a vi'c %i&* tra i tng c3 ~l ring haH %hng X _h-ng thac 5)pt2: tr/ vS %:t !"/ l i tng c %hgi tN# thnh ~ring. X hng 1t tDn ph-ng thac ch"ng ch"ng l 3i?5 * nDn phGn .i't rh ph-ng thac g5t3i?5 tr/ vS %Ich thc c$a i tng{ ph-ng thac *5t3i?5 gn lNi %Ich thc *iz VS chInh t/ c$a cc tDn cTng c3 cc !"H c. Fi GH trIch ti li'" java.7"n.c#*Qd#c7Qc#d@c#nvQht*lQC#d@C#nv@nti#n.d#cv.ht*l.

; - N1<)ng C=n&>n+)=n5
`a*ing c#nv@nti#n7 *a%@ pr#gra*7 *#r@ "nd@r7tanda.l@ .H *a%ing th@* @a7i@r t# r@ad. Mh@H can al7# giv@ inA#r*ati#n a.#"t th@ A"ncti#n #A th@ id@ntiAi@rXA#r @ra*pl@( Lh@th@r it7 a c#n7tant( pac%ag@( #r cla77XLhich can .@ h@lpA"l in "nd@r7tanding th@ c#d@.

I!>n+)?)>, T@0>

R%/>5 ?=, N1<)ng

AB1<0/>5

_ac%ag@7

Mh@ pr@Air #A a "ni!"@ pac%ag@ na*@ i7 alLaH7 Lritt@n in allXl#L@rca7@ AZC?? l@tt@r7 and 7h#"ld .@ #n@ #A th@ t#pXl@v@l d#*ain na*@7( c"rr@ntlH c#*( @d"( g#v( *il( n@t( #rg( #r #n@ #A th@ ngli7h tL#X c#*.7"n.@ng l@tt@r c#d@7 id@ntiAHing c#"ntri@7 a7 7p@ciAi@d in ?ZW Ztandard kVtt( VwvV. c#*.appl@.!"ic%ti*@.vp Z".7@!"@nt c#*p#n@nt7 #A th@ pac%ag@ na*@ varH acc#rding t# an #rganiati#n7 #Ln int@rnal na*ing c#nv@nti#n7. Z"ch c#nv@nti#n7 *ight 7p@ciAH that c@rtain dir@ct#rH na*@ c#*p#n@nt7 .@ divi7i#n( d@part*@nt( pr#j@ct( *achin@( #r l#gin na*@7. @d".c*".c7..#vi%.ch@@7@

Cla77@7

Cla77 na*@7 7h#"ld .@ n#"n7( in *ir@d ca7@ Lith th@ Air7t l@tt@r #A @ach int@rnal L#rd capitali@d. MrH t# %@@p H#"r cla77 na*@7 7i*pl@ and d@7criptiv@. 7@ cla77 a7t@r{ Lh#l@ L#rd7Xav#id acr#nH*7 and a..r@viati#n7 cla77 ?*ag@Zprit@{ <"nl@77 th@ a..r@viati#n i7 *"ch *#r@ Lid@lH "7@d than th@ l#ng A#r*( 7"ch a7 Y #r [M\Y=. ?nt@rAac@ na*@7 7h#"ld .@ capitali@d li%@ cla77 na*@7.

?nt@rAac@7

int@rAac@ a7t@rF@l@gat@{ int@rAac@ Zt#ring{

\@th#d7

\@th#d7 7h#"ld .@ v@r.7( in *ir@d ca7@ Lith th@ Air7t r"n<={ l@tt@r l#L@rca7@( Lith th@ Air7t l@tt@r #A @ach int@rnal r"nKa7t<={ L#rd capitali@d. g@t^ac%gr#"nd<={ rc@pt A#r varia.l@7( all in7tanc@( cla77( and cla77 c#n7tant7 ar@ in *ir@d ca7@ Lith a l#L@rca7@ Air7t l@tt@r. ?nt@rnal L#rd7 7tart Lith capital l@tt@r7. Varia.l@ na*@7 7h#"ld n#t 7tart Lith "nd@r7c#r@ #r d#llar 7ign charact@r7( @v@n th#"gh .#th ar@ all#L@d. Varia.l@ na*@7 7h#"ld .@ 7h#rt H@t *@aningA"l. Mh@ ch#ic@ #A a varia.l@ na*@ 7h#"ld .@ *n@*#nicX that x
int char float myWidth; i; c;

Varia.l@7

i7( d@7ign@d t# indicat@ t# th@ ca7"al #.7@rv@r th@ int@nt #A it7 "7@. Wn@Xcharact@r varia.l@ na*@7 7h#"ld .@ av#id@d @rc@pt A#r t@*p#rarH thr#LaLaH varia.l@7. C#**#n na*@7 A#r t@*p#rarH varia.l@7 ar@ i( j( k( m( and n A#r int@g@r7{ c( d( and e A#r charact@r7. 7tatic Ainal int \?`]?FM[ E x{ Mh@ na*@7 #A varia.l@7 d@clar@d cla77 c#n7tant7 and 7tatic Ainal int #A A`Z? c#n7tant7 7h#"ld .@ all "pp@rca7@ Lith L#rd7 \A]?FM[ E www{ 7@parat@d .H "nd@r7c#r@7 <=. <A`Z? c#n7tant7 7h#"ld .@ av#id@d( A#r @a7@ #A d@."gging.= 7tatic Ainal int 2MM[C_ E V{

C#n7tant7

CI 1D NGEN FGH H ng !"n


Java 4 tri&n %hai 78n hng i tr#ng g3i java.util( dn r")t t, lp V@ct#r <r@* hnh vb V=. `g0i lp trnh c3 th& 7B dCng ngaH * %hng cRn pht tri&n g thD*.

T$I# $Jn$
VX j+c ti li'" Javad#c( %h/# 7t g3i java.util.3tack{ t* hi&" cc ph-ng thac c$a Ztac%P 5)pt2" p55k" p#p" pu*h" *5arch v lp ch-ng trnh & t@7t h#Nt 9ng c$a cc ph-ng thac c$a Ztac%( dma th@# %h"ng ch# di GH
import java.util.Stack; public class TestStack { public static void main String!" args#{ Stack stack $ ne% Stack #; stack.push &'&#; . . . . . . . . .(( th)m m*t s+ pt System.out.println stack#; System.out.println . . .#; (( in ra k,ch th-.c stack System.out.println . . .#; (( in ph/n t0 12nh3 (( kh4ng l5y ra . . . . . . . . .(( in ra k6t 7u8 search 9 ph/n t0 . . . . . . . . .(( pop m*t s+ pt r:i in ra ;

pX ChO 7B dCng c#n*truct#r v cc phUp t#n ngqn r:p 5)pt2" p55k" p#p" pu*h h4H vi:t thD* ph-ng thac 7a" GH v %i&* thB <t@7t= th@# %h"ng ch# 78n. privat@ 7tatic v#id r@v@r7@ <Ztac% 7tac%={ QQ /# ngc tha tm cc phRn tB tr#ng ngqn r:p.
import java.util.Stack; public class Test<everseStack { public static void main String!" args#{ Stack stack $ ne% Stack #; stack.push &'&#; stack.push &=&#; stack.push &>&#; stack.push &?&#; stack.push &@&#; print stack#; reverse stack#; System.out.println &Stack sau khi reverse A&#;

print stack#; ; private static void reverse Stack stack#{ . . . . . . . . . . . . . . . . ; private static void print Stack stack#{ System.out.println &kich thuoc $ & B stack.siCe ##; try { System.out.println &stack.peek # $ & B stack.peek ##; ; catch java.util.@mptyStack@Dception e#{ System.out.println e B &stack is empty&#; ; System.out.println stack#; System.out.println &EEEEEEEEEEEEEEEEEEEEE&#;

; ;

kX ChO 7B dCng c#n*truct#r v cc phUp t#n ngqn r:p 5)pt2" p55k" p#p" pu*h h4H vi:t thD* ph-ng thac 7a" v %i&* thB <t@7t= th@# %h"ng ch# 78n t-ng tm nh tr#ng .i p. privat@ 7tatic Ztac% r@v@r7@d <Ztac% 7tac%={ QQ tr/ vS ngqn r:p *i %hc c3 cc phRn tB l QQ /# ngc tha tm cc phRn tB tr#ng ngqn r:p 4 ch# xX ChO 7B dCng c#n*truct#r v cc phUp t#n ngqn r:p 5)pt2" p55k" p#p" pu*h h4H vi:t thD* ph-ng thac 7a" v %i&* thB <t@7t= th@# %h"ng ch# 78n t-ng tm nh tr#ng .i p. p".lic W.j@ct p@n"lti*at@ <Ztac% 7tac%={ QQ tr/ vS phRn tB ang ngaH di t#p c$a ngqn r:p{ QQ ngqn r:p %hng thaH i. sX ChO 7B dCng c#n*truct#r v cc phUp t#n ngqn r:p 5)pt2" p55k" p#p" pu*h h4H vi:t thD* ph-ng thac 7a" v %i&* thB <t@7t= th@# %h"ng ch# 78n t-ng tm nh tr#ng .i p. p".lic W.j@ct .#tt#* <={ QQ tr/ vS phRn tB g H c$a ngqn r:p tX ChO 7B dCng c#n*truct#r v cc phUp t#n ngqn r:p 5)pt2" p55k" p#p" pu*h h4H vi:t thD* ph-ng thac 7a" _".lic W.j@ct p#p^#tt#* <={ QQ g . v tr/ vS phRn tB g H c$a ngqn r:p
u

uX Ch# ch-ng trnh java gi/i .i t#n thp [ n9i dng th"t gi/i ' !"H{ [4H vi:t th$ tCc %hng ' !"H gi/i .i t#n nH.
public class TestFanoiTo%er { public static void main String!" FanoiTo%er G3H'H3H=H3H>H#; ; args# {

public static void FanoiTo%er int n3 char D3 char y3 char C# { if n$$9# ((basic System.out.println D B & EI &B C#; else { FanoiTo%er nE93D3C3y#; FanoiTo%er 93D3y3C#; FanoiTo%er nE93y3D3C#; ; ; ;

import java.util.*; public class TestFanoiTo%erJKterative { public static void main String!" args# { FanoiTo%erJKterative G3H'H3H=H3H>H#; ; public static void FanoiTo%erJKterative int n3 char D3 char y3 char C# { . . . . . . . ; ; class Luad { public int n; public char a3b3c; public Luad int n3 char a3 char b3 char c#{ this.n $ n; this.a $ a; this.b $ b; this.c $ c; ; ;

vX p dCng Ztac%( lp ch-ng trnh tInh gi tr5 .i&" thmc h" t( *inh h+a rh t,ng .c tInh t#n tr"ng gian inputP rG" %o tm l .i&" thac h" t( gJ* cc 7 thmc v .n phUp t#n 7 h+c X n Q. VI dC k x s n V Q V X #utputP gi tr5 .i&" thac.
v

wX Ch-ng trnh java 7a" GH ch"H&n .i&" thac tr"ng t thnh .i&" thac h" t. [4H chNH thB ch-ng trnh( phGn tIch th"t gi/i v nD" rh h#Nt 9ng c$a ngqn r:p tr#ng th"t gi/i nH
import java.util.Stack; import java.io.*; public class KnfiDToMostfiD { public static void main String!" args# { try { Stack stack $ new Stack #; KnputStream<eader reader $ new KnputStream<eader System.in#; StreamTokeniCer tokens $ new StreamTokeniCer reader#; tokens.ordinary>har H(H#; ((trai lai la commnent tokens.eolKsSignificant true#; ((mac dinh la false int tokenType; System.out.print &enter an infiD eDpressionA &#; while tokenType$tokens.neDtToken ## N$ StreamTokeniCer.TT_EOL# { char ch $ char# tokenType; if tokenType$$StreamTokeniCer.TT_NUMBER# System.out.print tokens.nval B & &#; else if ch$$HBH OO ch$$HEH OO ch$$H*H OO ch$$H(H# stack.push new >haracter ch##; else if ch$$H#H# System.out.print >haracter# stack.pop # B & &#; ; while Nstack.empty ## System.out.print >haracter# stack.pop # B & &#; ; catch @Dception e# { System.out.println e#; ; ; ;

VX @&i tAp lnP Mhi:t %: v tri&n %hai %i&" ngqn r:p c3 thD* phUp t#n Kind\in X ^cng c)" tr;c */ng( X ^cng c)" tr;c *3c ni.

CI 2D HNG KLI H ng !"n


Java tri&n %hai nhiS" %i&" hng i %hc nha". F# 3 java 5nh ngh6a 78n *9t gia# di'n 6u5u5( gJ* nhng phUp t#n c- 7g ch"ng nh)t ch# hng i. Cc %i&" hng i %hc nha" 7b ci 1t gia# di'n nH. Fma trDn %h"ng %i:n tr;c cc lp tr#ng g3i java.util( ng0i lp trnh c3 th& tri&n %hai hng i .cng hai cch( dng c)" tr;c */ng v dng c)" tr;c *3c ni th@# cc .c nh 7a" <r@* hnh vb=P X j5nh ngh6a ti:p *9t gia# di'n 6u5u5" dn r")t t, gia# di'n B#ll5cti#n. X j5nh ngh6a ti:p *9t lp 7(*tract6u5u5 dn r")t t, 7(*tractB#ll5cti#n v i)pl5)5nt* gia# di'n 6u5u5. X Mri&n %hai hng i .cng c)" tr;c */ng( tac l 5nh ngh6a lp 7rra26u5u5. X Mri&n %hai hng i dng *3c ni( tac l 5nh ngh6a lp 8ink5$6u5u5. W.j@ct A.7tractC#ll@cti#n XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC#ll@cti#n A.7tracty"@"@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXy"@"@ ArraHy"@"@ Yin%@dy"@"@

X2ia# di'n ch# 6u5u5 dn r")t t, gia# di'n B#ll5cti#n.


package myType; import java.util.*; public interface LueueP@I extends >ollectionP@I { public Qbject de7ueue #; public Qbject en7ueue Qbject object#; public Qbject get=ack #; ((doc phan tu cuoi hRng3 kh4ng lay ra public Qbject getSront #; ((doc phan tu dau hang3 kh4ng lay ra ;

XYp 7(*tract6u5u5 dn r")t t, 7(*tractB#ll5cti#n v i)pl5)5nt* gia# di'n 6u5u5 <c$a ta v,a 5nh ngh6a=
package myLueue; import java.util.*; public abstract class 'bstractLueueP@I extends 'bstract>ollectionP@I implements myType.LueueP@I

{ protected 'bstractLueue # { ; public abstract Qbject de7ueue #; (( trien public abstract Qbject en7ueue Qbject object#; (( public abstract Qbject get=ack #; (( public abstract Qbject getSront #; (( public abstract KteratorP@I iterator #; (( public abstract int siCe #; ((

khai sau trien khai trien khai trien khai trien khai trien khai

sau sau sau sau sau

QQcc phUp t#n trDn ph/i li phRn tri&n %hai lNi 7a" v phC th"9c v# 7b dng c)" tr;c n#
public boolean e7uals Qbject object# { if object $$ this# return true; if N object instanceof 'bstractLueue## return false; 'bstractLueueP@I abstractLueue $ 'bstractLueueP@I# object; if abstractLueue.siCe # N$ siCe ## return false; return ;

QQ %i&* tra lRn lt chaa t)t c/ cc phRn tB


contains'll abstractLueue#;

public int hash>ode # { int n $ T ; for KteratorP@I it $ iterator #; it.hasNeDt #; Qbject object $ it.neDt #; if object N$ null# n B$ object.hash>ode #; ; return n; ; ;

# {

T$I# $Jn$
j+c ti li'" Java$#c( t* hi&" h' thng cc %i&" 6u5u5 %hc nha" 4 c rGH dmng 78n tr#ng Java. VX ZB dCng cc 5nh ngh6a gia# di'n 6u5u5 v lp 7(*tract6u5u5 4 ch# g trDn( rGH dmng lp 7rra26u5u5 th@# %h"ng *" ch# di GH. Yp T5*t6u5u5 & %i&* thB. M chac pac%ag@ *Hy"@"@( chaa k t'pP gia# di'n 6u5u5( Yp 7(*tract6u5u5 v lp 7rra26u5u5 di GH..
package myLueue; import java.util.*; public class 'rrayLueueP@I extends myLueue.'bstractLueueP@I { protected Qbject!" objects; protected int front $ . . .; protected int back $ . . .; protected int capacity $ . . .; protected int siCe $ . . .; public 'rrayLueue # {objects $ new Qbject!. . ."; ;

VV

public 'rrayLueue int capacity# { this.capacity $ . . .; objects $ new Qbject!. . ."; ; public int siCe # {return siCe;; public boolean is@mpty # { return . . .; ; public boolean isSull # { return . . .; ; public Qbject get=ack # { . . . . . . ; return . . . . ; ; public Qbject getSront # { . . . . . . . . ; return . . . . . ; ; public Qbject de7ueue # { . . . . . . . . . return . . . . . .; ; public Qbject en7ueue Qbject . . . . . return . . . .; ; object# {

public KteratorP@I iterator # { return new KteratorP@I # { (( lop con v4 danh private int cursor $ front; public boolean hasNeDt # {return cursor P$ back; ; public @ neDt # { if cursor I back# throw new NoSuch@lement@Dception return @#objects!cursorBB"; ; public void remove #{ ; ;; ;

#;

import myLueue.*; public class TestLueue { public static void main String!" args#{ 'rrayLueuePStringI 7 $ new 'rrayLueuePStringI #; System.out.println 7#; 7.en7ueue &'&#; System.out.println 7#; 7.en7ueue &=&#; System.out.println 7#; 7.en7ueue &>&#; System.out.println 7#; 7.en7ueue &?&#; System.out.println 7#; 7.en7ueue &@&#; System.out.println 7#; System.out.println & siCe $ & B 7.siCe ##; System.out.println & getSront # $ & B 7.getSront ##;

Vp

System.out.println & get=ack # $ & B 7.get=ack ##; 7.de7ueue #; 7.de7ueue #; System.out.println 7#; for ; ; java.util.KteratorPStringI it $ 7.iterator #; it.hasNeDt #; # System.out.println & it.neDt # $ & B it.neDt ##;

pX Mri&n %hai lp 8ink5$6u5u5" 7B dCng 8inhk5$8i*t <r@* .i thmc hnh danh 7ch=( 5nh ngh6a cc phUp t#n hng i !"a phUp t#n danh 7ch{
((Uay dung VinkedLueue dung VinkedVist ((Wiet cac phep toan cua Lueue 7ua cac phep toan cua Vist package myLueue; import java.util.*; public class VinkedLueueP@I extends myLueue.'bstractLueueP@I { private static VinkedVist list $ new VinkedVist #; (( trien khai cac phep toan 7ua Vist public Qbject de7ueue # {return . . . . ;; public Qbject en7ueue Qbject object# {return . . . . ;; public Qbject get=ack # {return . . . . . .;; public Qbject getSront # {return . . . . . ;; public int siCe #{return . . . . . .;; public ; ; KteratorP@I iterator # { return list.listKterator T#; (( lay Kterator cua VinkedVist

kX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB QQ /# ngc tha tm cc phRn tB tr#ng hng i.
public static void reverse 'rrayLueue 7#{ . . . . . . . . . .

xX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB QQ tr/ vS hng i *i c3 cc phRn tB l QQ /# ngc tha tm cc phRn tB tr#ng hng i 4 ch#
public static ArrayQueue reverse 'rrayLueue 7#{ . . . . . . . . . . ;

Vk

sX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB _".lic 7tatic W.j@ct 7@c#nd <ArraHy"@"@ !"@"@={ QQ tr/ vS phRn tB ang tha hai tr#ng hng i tX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB _".lic 7tatic W.j@ct la7t <ArraHy"@"@ !"@"@={ QQ tr/ vS phRn tB c"i tr#ng hng i( ging phUp t#n (ack uX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB _".lic 7tatic W.j@ct r@*#v@Ya7t <ArraHy"@"@ !"@"@={ QQ g . v tr/ vS phRn tB c"i tr#ng hng i vX ChO 7B dCng c#n*truct#r v cc phUp t#n hng i i*>)pt2" 5nCu5u5" $5Cu5u5 h4H vi:t thD* ph-ng thac 7a" v %i&* thB _".lic 7tatic ArraHy"@"@ *@rg@ < ArraHy"@"@ !V( ArraHy"@"@ !p={ QQ hda nhp r@n %b hai hng i.

Vx

CI MD DANH NOCH H ng !"n


Java 4 tri&n %hai 78n *9t 7 %i&" danh 7ch tr#ng g3i java.util( dn r")t t, lp B#ll5cti#n <r@* hnh vb V=. `g0i lp trnh cRn t* hi&" % & c3 th& 7B dCng ;ng }n. X 7(*tract8i*t l lp danh 7ch c- 7g( ci 1t gia# di'n 8i*t l tp hp cc phUp t#n c- 7g c$a danh 7ch. Cc lp dn r")t cC th& 8ink5$8i*t" 7rra28i*t c3 th& %hng ci 1t *9t 7 phUp t#n. X V gia# di'n Dt5rat#r chO d"H't th@# *9t hng ti:n nDn & tri&n %hai cc phUp di ch"H&n cBa 7 tr#ng danh 7ch <c3 c/ li=( java 5nh ngh6a 8i*tDt5rat#r dn r")t t, Dt5rat#r. X Yp 7rra2* c3 *9t ph-ng thac ch# phUp ch"H&n thnh danh 7ch */ngP 7rra2*.a*8i*t.

T$I# $Jn$
VX M* hi&" cc ph-ng thac tr#ng gia# di'n 8i*t. Vi:t *9t ch-ng trnh & t@7t h#Nt 9ng c$a cc ph-ng thac nH( dng 7rra2*.a*8i*t & tN# danh 7ch.
import java.util.*; public class TestVistKnterfaces { public static void main String!" args#{ String!" strings; strings $ ne% String!"{&'&3&=&3&>&3&?&3&@&;; Vist list $ 'rrays.asVist strings#; . . . . . . (( in ra toRn b* danh sXch . . . . . . (( in ra k,ch th-.c danh sXch . . . . . . (( in ra t)n l.p cYa danh sXch . . . . . . (( in ra m*t ph/n t0 thZ i nRo 1[ . . . . . . (( in ra k6t 7u8 t\m ki6m 9 pt . . . . . . (( th]c hi^n ph_p th)m pt .. . . . . . . ; ;

pX M* hi&" cc ph-ng thac tr#ng gia# di'n li*tDt5rat#r. Vi:t *9t ch-ng trnh & t@7t h#Nt 9ng c$a cc ph-ng thac nH.
Vs

public class TestVistKterator { public static void main String!" args#{ . . . . . . (( kh`i tao m*t danh sXch3 pt lR Dau kb t] . . . . . . (( in ra toRn b* VistKterator it $ list.listKterator #; System.out.println &it.neDt # $ & B it.neDt ##; . . . . . . . . . (( di chuycn ldi . . . . . . ; ; . . (( cXc ph_p toXn khXc

kX Vi:t ch-ng trnh & t@7t h#Nt 9ng c$a danh 7ch */ng tr#ng java( 7B dCng gi o di GH
import java.util.*; import java.io.*; public class Test'rrayVist { private static 'rrayVist list $ ne% 'rrayVist #; public static void main String!" args#{ . . . . . QQ thD* *9t 7 phRn tB System.out.println &list $ & B list#; . . . . QQg . *9t 7 phRn tB System.out.println &list $ & B list#; . . . QQ *9t 7 phUp t#n %hc . . . QQ *9t 7 phUp t#n %hc . . . QQ *9t 7 phUp t#n %hc

; ;

xX M* hi&" lp 8ink5$8i*t{ Vi:t *9t ch-ng trnh & t@7t h#Nt 9ng c$a danh 7ch *3c ni tr#ng java( t-ng tm .i trDn. sX Vi:t ph-ng thac tN# danh 7ch *3c ni gJ* n ch ci( 7inh ng" nhiDn dma trDn gi o 7a"
public static void load<andomVetters VinkedVist list3 int n# { . . . . . %hile T P nEE# { list.add ef B char# g'h B int# iath.random #*jk###; . . . . . ;

Fng 8i*tDt5rat#r aX vi:t ph-ng thac in ra n9i d"ng c$a danh 7ch *3c ni cc i tng( *ii i tng trDn *9t ddng.
Vt

.X vi:t ph-ng thac in ra n9i d"ng c$a danh 7ch *3c ni cc i tng nhng th@# tha tm ngc t, c"i lDn R" danh 7ch. cX p dCng & in ra n9i d"ng danh 7ch 7inh ng" nhiDn n3i trDn. tX Vi:t ph-ng thac v %i&* thB _".lic 7tatic v#id @rchang@ <Yin%@dYi7t li7t( int i( int j= QQ tr# i hai n;t tha i v tha j c$a danh 7ch *3c ni

Vu

CI PD CQR NHS HHQN

H ng !"n
Java C#ll@cti#n7 Kra*@L#r% %hng 5nh ngh6a %i&" cGH( cGH nh5 phGn n3i ch"ng. Mr#ng Java C#ll@cti#n7 Kra*@L#r% c3 tri&n %hai %i&" cGH nh5 phGn t* %i:* X @n tr#ng cc lp Tr55Map" Tr5535t & dng ch# %i&" ./ng v %i&" tp hp. M chac Kr@@n@t c3 pht tri&n *9t lp cGH nh5 phGn t* %i:*( dn r")t t, lp gc W.j@ct. GH( & thmc hnh ta ti:p cn *9t cch l* %hc. Fma trDn %h"ng %i:n tr;c cc lp tr#ng g3i java.util( ng0i lp trnh c3 th& tri&n %hai cc %i&" cGH .cng cch pht tri&n *g r9ng lp 7(*tractB#ll5cti#n. CC th& nh 7a"P X CGH c 5nh ngh6a ' !"H( gJ* n;t gc( cGH c#n tri( cGH c#n ph/i( cGH cha <cGH c3 n;t gc l n;t cha= v *9t .i:n *i?5. X j5nh ngh6a cc c#n*truct#r. X V %: th,a t, 7(*tractB#ll5cti#n nDn ph/i tri&n %hai vi:t cc ph-ng thac 5Cual*" ha*hB#$5" it5rat#r v *i?5. iDng ph-ng thac r5)#v5 %hng tri&n %hai chi ti:t v gg . *9t n;t th"9c cGH l phUp t#n phac tNp. Fi GH ch# 78n *9t vI dC v *9t 7 #Nn *4 cRn dng tr#ng cc .i thmc hnh
package binTree; import java.util.* ; public class protected protected protected =inaryTreeP@I extends java.util.'bstract>ollectionP@I { Qbject root; =inaryTreeP@I left3 right3 parent; int siCe;

public =inaryTree # {; public =inaryTree Qbject root# {this.root $ root; siCe $ 9;; public =inaryTree Qbject root3 =inaryTreeP@I left3=inaryTreeP@I right#{ this root#; if left N$ null# { this.left $ left; left.parent $ this; siCe B$ left.siCe; ; if right N$ null# { this.right $ right ; right.parent $ this; siCe B$ right.siCe; ; ; public int siCe # { return siCe;; public boolean e7uals Qbject object# { if N object instanceof =inaryTree## return false; =inaryTreeP@I tree $ =inaryTreeP@I# object;

Vv

return

ll ll ll ll

tree.root.e7uals root# tree.left.e7uals left# tree.right.e7uals right# tree.parent.e7uals parent# tree.siCe $$ siCe #;

public int hash>ode # { return root.hash>ode # B left.hash>ode # B right.hash>ode # B siCe; ; public KteratorP@I iterator # { return new java.util.KteratorP@I # { ((lop vo danh private boolean root?one; private java.util.KteratorP@I lit3 rit; (( iterator cua con trai3 con phai public boolean hasNeDt # { return N root?one OO lit N$ null ll lit.hasNeDt # OO rit N$ null ll rit.hasNeDt # ; ; public @ neDt # { ((duyet theo thu tu truoc if root?one# { if lit N$ null ll lit.hasNeDt ## return lit.neDt #; if rit N$ null ll rit.hasNeDt ## return rit.neDt #; return null; ; if left N$ null # lit $ left.iterator #; if right N$ null # rit $ right.iterator #; root?one $ true; return @#root; ; public void remove # { throw new mnsupportedQperation@Dception #;; (( khong trien khai vi phuc tap ; ; ; ;

T$I# $Jn$
Vi:t *9t ch-ng trnh 7B dCng cc c#n*truct#r c$a lp @inar2Tr55 & rGH dmng *9t cGH nh5 phGn( *ii n;t chaa *9t %o tm. i&* tra h#Nt 9ng c$a cc ph-ng thac c$a lp @inar2Tr55.
import Pt)n packageI ; ((ph8i tno m*t package vR 1-a t^p ((=inaryTree.java ` tr)n vRo g[i nRy

public class Test=inaryTree { static public void main String!" args#{ =inaryTreePStringI e $ new =inaryTreePStringI =inaryTreePStringI g $ new =inaryTreePStringI =inaryTreePStringI h $ new =inaryTreePStringI =inaryTreePStringI d $ new =inaryTreePStringI =inaryTreePStringI c $ new =inaryTreePStringI . . . . . . (( ti6p tpc n+i th)m vRo cay

&@&#; &o&#; &F&#; &?&3e3 g#; &>&3null3h#;

Vw

. . . . . .

((

(( Test cXc ph_p toXn khXc . . . . . . . . .

VX Yp @inar2Tr55 4 ch# thmc hi'n phUp d"H't it5rat#r th@# tha tm trc. Mh@# %h"ng thi:t %: nh di GH( h4H . 7"ng thD* v# *4 ng"Jn c$a @inar2Tr55 & tri&n %hai cc phUp d"H't a X th@# tha tm gia( .X th@# tha tm 7a"( cX th@# chiS" r9ng. Za" 3 vi:t ch-ng trnh in ra n9i d"ng cc n;t 7B dCng t,ng phUp d"H't trDn & %i&* tra.
(( Th)m vRo t^p =inaryTree public abstract class Kterator { protected boolean root?one; protected Kterator lit3 rit; ((iterator cYa con trXi3 con ph8i public boolean hasNeDt # { return N root?one OO lit N$ null ll lit.hasNeDt # OO rit N$ null ll rit.hasNeDt # ; ; public abstract @ neDt #; ((cai 1at sau theo tung phep duyet public void remove # { throw new mnsupportedQperation@Dception #;; (( khong trien khai vi phuc tap ; ((EEEEEEEEEEEEEEEEEEEEEE public class MreQrder extends Kterator { public MreQrder # { if left N$ null # lit $ left.new MreQrder #; if right N$ null # rit $ right.new MreQrder #; ; public @ neDt # { if N root?one# { root?one $ true; return @#root; ; if lit N$ null ll lit.hasNeDt ## return lit.neDt #; if rit N$ null ll rit.hasNeDt ## return rit.neDt #; return null; ; ; ((EEEEEEEEEEEEEEE public class KnQrder extends Kterator { . . . . . . ; ((EEEEEEEEEEEEEEE public class MostQrder extends Kterator { . . . . . . . ; ((EEEEEEEEEEEEEEEEEEE

public class VevelQrder extends Kterator { 'rrayLueueP@I 7 $ new 'rrayLueue #; . . . . . . . . ;

[ng dn 7B dCng phUp d"H't


=inaryTree.Kterator it; System.out.print &MreQrder TraversalA &#; for it $ tree.new MreQrder #; it.hasNeDt #; System.out.print it.neDt # B & &#;

pX ZB dCng phUp d"H't th@# tha tm gia( vi:t *9t th$ tCc *h#E3tructur5 in cGH nh5 phGn ra *n hnh th@# chiS" ngang t, tri 7ang ph/i( *ii n;t trDn *9t ddng v li c9t 7ang ph/i ;ng .cng l@v@l c$a n;t. Cch in nH r)t c3 Ich v hi&n th5 cGH *9t cch trmc !"an & %i&* tra %:t !"/ cc phUp t#n i vi cGH. VI dC cGH nh5 phGn

A B D H
Zb c in ra thnh

C E F G

H D I B E A F C G
Vi:t ch-ng trnh %i&* thB( 7B dCng cc vI dC *" 4 ch# g trDn kX Vi:t cc ph#ng thac & thD* *9t n;t l thnh c#n tri Q c#n ph/i c$a n;t ang rUt. =inaryTree in*5rt85Ft GH(j5ct #(jI" =inaryTree in*5rtJightGH(j5ct #(jI

pV

xX Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB QQtr/ vS 7 n;t l c$a cGH
public int leaves #{ int numVeaves; . . . . . . . ;

sX Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB.


public void defoliate #;

QQ g . cc n;t l c$a cGH tX Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB.
public int height #;

QQ tr/ vS chiS" ca# c$a cGH uX Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB.
public int level Qbject object#;

QQ tr/ vS l@v@l c$a n;t chaa i tng n:" th"9c cGH( XV n:" %hng th"9c cGH vX Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB.
public void reflect #;

QQ tr# i c#n tri > c#n ph/i tNi *+i n;t wX MNi *ii n;t c$a cGH nh5 phGn c3 tr0ng *i?5 l %Ich thc c$a cGH * n3 l gc. Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB <[ng dnP . 7"ng thD* cG" l'nh v# th$ tCc *h#E3tructur5 & in ra tr0ng *i?5 c$a *9t cGH nh5 phGn=
public void updateSiCeJmp =inaryTree node#;

QQ 7a" %hi thD* n;t v# cGH( cp nht lNi 7i@ c$a cc n;t QQ t, n;t *i thD* lDn :n gc cGH VXMNi *ii n;t c$a cGH nh5 phGn c3 tr0ng *i?5 l %Ich thc c$a cGH * n3 l gc. Vi:t thD* ph-ng thac 7a" ch# lp @inar2Tr55 v %i&* thB <[ng dnP . 7"ng thD* cG" l'nh v# th$ tCc *h#E3tructur5 & in ra tr0ng *i?5 c$a *9t cGH nh5 phGn=
public void updateSiCeJ?o%n =inaryTree node#;

QQ cp nht lNi 7i@ c$a t)t c/ cc n;t tr#ng cGH( t, gc r"ng. QQ <7a" %hi thmc hi'n cc phUp !"aH <r#tati#n > r@* phRn cGH AVY=
pp

pk

CI TD CQR NHS HHQN TU3 VIG3 H ng !"n


Mr#ng Java C#ll@cti#n7 Kra*@L#r% c3 tri&n %hai %i&" cGH nh5 phGn t* %i:* X @n tr#ng cc lp Tr55Map" Tr5535t & dng ch# %i&" ./ng v %i&" tp hp <r@* .i thmc hnh vS ./ng v .i thmc hnh vS tp hp=. C3 th& t/i *4 ng"Jn vS & phGn tIch h+c tp cch thi:t %: v tri&n %hai r)t .i ./n th@# %h"ng %i:n tr;c c$a Java C#ll@cti#n7 Kra*@L#r%. GH( & thmc hnh ta rGH dmng ti:p %i&" cGH t* %i:* nh5 phGn cGn i AVY( %: th,a t, lp cGH nh5 phGn @inar2Tr55 tr#ng .i trc. j& -n gi/n( ta chO rUt cGH * )Ki nt ch!a 1 *L ngu2<n. Fi GH ch# 78n *9t %h"ng & pht tri&n. Mrc h:t cha rUt vi'c cGn .cng( 7a" 3 *i ci 1t cc phUp !"aH <r#tati#n= & d"H tr tInh cGn .cng.
package binSearchTree; import binTree.=inaryTree; import java.util.* ; public class 'WVTree extends binTree.=inaryTreePKntegerI { protected int balance; public 'WVTree # {;; public 'WVTree Knteger root# {super root#; balance $ T;; public 'WVTree Knteger root3 'WVTree left3 'WVTree right# { ((M<@>QN?KTKQNA E9 P$ left.height # E right.height # P$ 9 super root3 left3 right#; this.update=alance #; ; public int get=alance #{ return balance;; public int update=alance #{ . . . . ; ((them khoa3 public 'WVTree insert Knteger num# { . . . (( Sind ne% nodeHs parent. . . . (( Set up ne% node. 'WVTree n $ new 'WVTree num#; n.parent $ parent; (( Knsert node in tree. . . . (( Special case inserting into an empty tree. . . . if comparison I T# parent.right $ n; else

px

parent.left $ n; (( <ebalance after insert. insertSiDup n#; return null;

(** * iaintain 'WV balance after inserting a ne% node. *( private void insertSiDup 'WVTree n# { . . . if 'WVTree#n.parent N$ null # { ((truong hop b . . . ((truong hop a . . . ((truong hop c ;((het phuong thuc insertSiDup (** * <otate node n to the left. *( private void rotateVeft 'WVTree node# { .. Dem Treeiap.java .. ; (** * <otate node n to the right. *( private void rotate<ight 'WVTree node# { .. Dem Treeiap.java .. ;

T$I# $Jn$
VX j+c javad#c c$a cc lp Tr55Map" Tr5535t & hi&" cch thi:t %: v t/i vS *4 ng"Jn t* hi&" cch ci 1t cc phUp t#n c$a cGH nh5 phGn t* %i:* X@n 4 thmc hi'n tr#ng Java C#ll@cti#n Kra*@L#r%. Ch; o cc phUp t#nP thD* %h3a in*5rt( phUp !"aH r#tat585Ft" r#tat5Jight v phUp cGn i lNi in*5rtMi=up" $5l5t5Mi=up. pX ZB dCng phUp d"H't th@# tha tm gia <.i thmc hnh cGH nh5 phGn=( vi:t ch-ng trnh in ra n9i d"ng cc n;t c$a cGH nh5 phGn t* %i:* dng phUp d"H't th@# tha tm gia & th)H %:t !"/ l *9t d4H tqng dRn. kX GH dmng lp cGH nh5 phGn t* %i:* <cha rUt tInh cGn i=( %: th,a t, lp cGH nh5 phGn @inar2Tr55 tr#ng .i trcP paX Vi:t ph-ng thac 35arch <t* n;t chaa %h3a ch# trc= p.X Vi:t ph-ng thac thD* *9t %h3a v# cGH Dn*5rt" cha rUt tInh cGn i( <h+c th@# ph-ng thac in*5rt tr#ng lp Tr55Map c$a JCK={
ps

pcX Vi:t ph-ng thac Np$at53i?5 cp nht tr0ng *i?5 7a" %hi thD* n;t <*ii n;t c3 tr0ng 7i@ l %Ich thc c$a cGH * n3 l gc. Y" o cRn cp nht lDn :n gc cGH=. Vi:t ch-ng trnh %i&* thB h#Nt 9ng c$a cc ph-ng thac trDn <dng ph-ng thac *h#E3tructur5 & in ra c)" tr;c cGH = xX Fma th@# cc th$ tCc !"aH tri r#tat585Ft !"aH ph/i r#tat5Jight c$a lp Tr55Map tr#ng Java C#ll@cti#n Kra*@L#r%( vi:t cc th$ tCc !"aH tri( !"aH ph/i ch# cGH AVY 5nh ngh6a g trDn
private void rotateVeft 'WVTree node# { .. Dem Treeiap.java .. ; private void rotate<ight 'WVTree node# { .. Dem Treeiap.java .. ;

sX Mh@# %h"ng 4 ch# g trDn( vi:t th$ tCc cGn i lNi in*5rtMi=up & d"H tr tInh cGn i AVY %hi thD* %h3a( 7B dCng cc phUp !"aH tri r#tat585Ft !"aH ph/i r#tat5Jight. ^ 7"ng thD* th$ tCc in*5rtMi=up v# ph-ng thac in*5rt ch# lp AVYMr@@. Vi:t ch-ng trnh t@7t( l* *9t cGH nh5 phGn t* %i:* AVY .cng cch thD* dRn t,ng %h3a v %i&* tra h#Nt 9ng c$a cc ph-ng thac 4 ci 1t <dng ph-ng thac *h#E3tructur5 & in ra c)" tr;c cGH = tX MNi *ii n;t c$a cGH nh5 phGn c3 tr0ng *i?5 l %Ich thc c$a cGH * n3 l gc. ZB dCng cc ph-ng thac cp nht tr0ng 7i@ tr#ng .i thmc hnh cGH nh5 phGn <up$at53i?5ONp" up$at53i?5OP#En= cp nht lNi tr0ng 7i@ c$a *+i n;t tr#ng cGH AVY 7a" %hi thmc hi'n cGn i lNi.

pt

CI WD HAAH V HNG KLI XU TIYN H ng !"n


C3 th& rGH dmng hng i " tiDn tr#ng java .cng hai cchP XFn r")t t, lp l* 78n java.util.Tr5535tQ h#1c XY* trmc ti:p .cng */ng h@ap. `:" cc i tng tr#ng hng i " tiDn %hng ph/i l cc %i&" ng"HDn th$H th ph/i tri&n %hai phUp t#n 7# 7nh <*ac " tiDn= hai i tng. Mh@# %h"ng %i:n tr;c c$a java( phUp 7# 7nh cRn pht tri&n dma trDn gia# di'n java.util.B#)parat#r( ngh6a l rGH dmng lp B#)parat#r c3 tri&n %hai gia# di'n trDn. Y" o rcng B#)parat#r ph/i t-ng thIch vi 5Cual*. Yp Tr5535t c3 ci 1t gia# di'n 3#rt5$35t( ch# phUp rB lo tha tm gia cc phRn tB 7# 7nh th@# B#)parat#r. _hRn ln cc phUp t#n c$a Tr5535t c3 th0i gian l W<l#g n=.

T$I# $Jn$
VX j+c ti li'" Java$#c( t* hi&" h' thng cc %i&" hng i " tiDn %hc nha" 4 l* 78n tr#ng Java. pX Ch# gia# di'n Dnt4ri#rit26u5u5Dnt5rFac5 di GH & l* hng i " tiDn trmc ti:p t, */ng h@ap cc 7 ng"HDn
package myKntMriorityLueueKnterfaces; public interface KntMriorityLueueKnterface { public int top #; ((tr8 vq ph/n t0 thZ nh5t trong trp3 kh4ng gs bt public int pop #; ((tr8 vq ph/n t0 thZ nh5t trong trp vR gs bt public void push int D#; (( th)m s+ nguy)n D vRo hRng 1ui public int siCe #; public String toString #; ;

[4H h#n thi'n *4 ng"Jn rGH dmng lp Dnt4ri#rit26u5u5 thmc hi'n hng i " tiDn .cng */ng h@ap th@# %h"ng thi:t %: di GH <v t@7t h#Nt 9ng c$a cc th$ tCc )H=. aX [#n thi'n th$ tCc h5apiF2Np v pu*h .X [#n thi'n th$ tCc h5apiF2P#En v p#p
package . . . . . ;

pu

import . . . . . .; public class private private private KntMriorityLueue implements final int >'M'>KTv $ 9k; int capacity3 siCe ; int!" ints; KntMriorityLueueKnterface {

public KntMriorityLueue # { capacity $ >'M'>KTv; ints $ new int!capacityB9"; ; public KntMriorityLueue int capacity# { . . . . ; public int top # { . . . ; public int pop # { . . . ; public void push int D# { . . . ; public int siCe # {. . . . ; public String toString # { (( vi6t 1w toString 1c in m8ng ra if siCe $$ T# return &!"&; String string $ &!& B ints!9"; for int i$j; iP$ siCe; iBB# string B$ &3& B ints!i" ; return string B &"& ; ; private private void void heapifymp # { . . . . . ; heapify?o%n # { . . . . ;

private void s%ap int!" a3 int i3 int j# { ((trXo 1xi ph/n t0 i v.i ph/n t0 j trong m8ng a ((ddng trong cXc ph_p toXn heapifymp3 heapify?o%n int tmp$a!i"; a!i"$a!j"; a!j"$tmp; ; ;

kX Vi:t thD* ph-ng thac 7a" ch# lp Dnt4ri#rit26u5u5


Mublic boolean isFeap #

QQ %i&* tra r@* */ng 7 ng"HDn int7 c3 tha iS" %i'n h@ap haH %hng xX Vi:t thD* ph-ng thac r@7i@ & tqng %Ich thc */ng lDn g)p i %hi hng i " tiDn .5 RH
private void resiCe #{ ((khi by 1/y th\ tzng k,ch th-.c g5p 14i . . . . . . . ;

pv

CI ZD CNG CE3 [ T\ KI]N H ng !"n


^/ng <ta(l5= haH ./ng tra t* <l##kup ta(l5= cTng cdn c g+i l )ap haH $icti#nar2 haH a**#ciativ5 arra2 Mr#ng g3i java."til( c3 5nh ngh6a gia# di'n Map v dn r")t 3#rt5$Map ch# tr0ng hp c3 rUt :n tha tm c$a %h3a tra t*. Java c3 rGH dmng 78n cc lp 7a" & tri&n %hai \ap. X Yp A.7tract\ap l lp c- 7g & dn r")t ra cc lp \ap %hc X Yp Ha*hMap" dng c)" tr;c ./ng .q* *3c ni ng#i X Yp Tr55Map( dng c)" tr;c cGH t* %i:* nh5 phGn X @n( ci 1t gia# di'n 3#rt5$Map.

T$I# $Jn$
j+c ti li'" Java$#c( t* hi&" cc lp \ap 4 l* 78n tr#ng Java. VX [#n thi'n ch-ng trnh thmc hi'n *9t ./ng tra t, Anh > Vi't & *inh h+a h#Nt 9ng c$a cc phUp t#n c$a lp [a7h\ap th@# *" 7a"
import java.util.Fashiap; import java.util.iap; public class Test@Wlookup { public static void main String!" args# { iap map $ new Fashiap #; map.put &=ook&3 &Sach&#; . . . . . System.out.println &map $ & B map#;

; ;

zzzzz QQ in ra cc %@H tr#ng ./ng zzzzz..QQ in ra cc val"@ tr#ng ./ng zzzzzQQ in ra %:t !"/ tra t* *9t t, c3 tr#ng ./ng zzzzz.QQ in ra %:t !"/ tra t, %hng c3 zzz..

pX Y* lNi .i trDn nhng dng Mr@@\ap thaH ch# [a7h\ap. _hGn tIch 7m %hc nha". 2i/i thIch tNi 7a#.

pw

kX Fi GH 4 ch# h* ha*h tInh 5a chO .q* c$a *9t i tng v in7@rt v# ./ng .q* 3ng( dng phUp thB t"H:n tInh. [4H . 7"ng thD* cc l'nh & h#n thi'n h* printHa*h P dng h* ha*h & in7@rt *9t L#rd v# ./ng .q*( Jng th0i in ra L#rd %* vi 5a chO .q* c$a L#rd
import java.util.*; public class private private private private TestFash'drres { static final int MASK $ TD{SSSSSSS; ((d|y bit 9 static final int CAPACITY $ 99; (( k,ch th-.c b8ng bzm static int size $ T; static boolean!" used $ new boolean!CAPACITY";

public static void main String!" args# { printHas &=ook&#; . . . . . . . . ; private static void printFash String %ord# { (( ddng hRm as 1c insert m*t %ord vRo b8ng bzm (( in ra %ord kwm v.i 1ya ch2 bzm cYa %ord . . . . . . . . . ; private static int hash Qbject object# { ((tInh 5a chO .q* c$a t, v in7@rt v# ./ng( dng phUp BBsiCe; int h $ object.hash>ode # l i'S} # ~ >'M'>KTv; %hile used!h"#{ System.out.print h B &3 &#; h $ hB9#~>'M'>KTv; ; used!h"$true; return h; ;

thB t"H:n tInh

xX `9i d"ng nh .i k( nhng HD" cR" . 7"ng thD* cc l'nh & in ra c/ cc 5a chO .5 r"ng 9t tr#ng !" trnh thB t"H:n tInh( 5a chO thnh cng v h' 7 RH <l#ad Aact#r= c$a ./ng. \inh h+a r"ng 9t 5a chO tqng ca# %hi ./ng 7}p RH. sX Y* lNi .i trDn vi phUp thB .nh ph-ng <!"adratic pr#.ing= ch# 78n di GH.
private static int hash Qbject object#{ BBsize; int h $ object.hash>ode # l MASK # ~ CAPACITY; if used!h"#{ int hT $ h; int jump $ 9; while used!h"# { System.out.print h B &3 &#; h $ hT B jump*jump#~CAPACITY; BBjump; ; ;

used!h"$true; return h; ;

kV

CI ^D TH HLH H ng !"n
Java C#ll@cti#n7 Kra*@L#r% tri&n %hai cc c)" tr;c .i&" di|n tp hp 7#ng 7#ng vi ./ng <r@* hnh V=. ji&* %hc nha" gia tp hp v ./ng l cc phRn tB c$a tp hp chO c3 phRn k52 cdn cc phRn tB ./ng l *9t c1p <k52" valu5= Mr#ng g3i java."til( c3 5nh ngh6a gia# di'n 35t v dn r")t 3#rt5$35t ch# tr0ng hp c3 rUt :n tha tm c$a phRn tB tr#ng tp. Java c3 rGH dmng 78n cc lp 7a" & tri&n %hai Z@t. X Yp A.7tractZ@t l lp c- 7g & dn r")t ra cc lp Z@t %hc X Yp Ha*h35t" dng c)" tr;c ./ng .q* *3c ni ng#i X Yp Tr5535t( dng c)" tr;c cGH t* %i:* nh5 phGn( ci 1t gia# di'n 3#rt5$35t.

T$I# $Jn$
j+c ti li'" Java$#c( t* hi&" cc lp 35t 4 l* 78n tr#ng Java. VX Vi:t ch-ng trnh tN# ra *9t tp hp cc phRn tB l rG" %o tm( 7a" 3 dng ?t@rat#r & d"H't in ra n9i d"ng tp hpP aX Fng [a7hZ@t( .X Fng Mr@@Z@t. <2i oP t-ng tm nh .i thmc hnh phRn ./ng .q*=. Z# 7nh %:t !"/ gia hai %i&" tp hp. pX Vi:t thD* phUp t#n tp hp 7a" GH. QQphUp hp hai tp kX Vi:t thD* phUp t#n tp hp 7a" GH. QQphUp gia# hai tp xX Vi:t thD* phUp t#n tp hp 7a" GH.
public static TreeSet complement TreeSet a3 TreeSet b# public static TreeSet intersection TreeSet a3 TreeSet b# public static TreeSet union TreeSet a3 TreeSet b#

QQphUp tr, a > . sX Vi:t thD* phUp t#n tp hp 7a" GH.


public static boolean isSubset TreeSet a3 TreeSet b#

QQ%i&* tra a l tp c#n c$a .

kp

CI ;D K_ THS H ng !"n
jJ th5 l *9t * hnh d li'" phac tNp( c)" tr;c tri&n %hai n3 gJ* nhiS" thnh phRn. Java C#ll@cti#n7 Kra*@L#r% %hng tri&n %hai 78n cc c)" tr;c .i&" di|n J th5. M"H nhiDn t chac *#urc5F#rg5.n5t <http://jgrapht.sourceforge.net= c3 rGH dmng *9t th vi'n lp java phCc vC tri&n %hai J th5. Fi GH trIch ti li'" java vS cc lp trDn
Vi7it http://jgrapht.sourceforge.net t# d#Lnl#ad and t# g@t th@ lat@7t inA# #n J2raphM.

T$I# $Jn$
1- Ci 1t v chNH thB cc ch-ng trnh *inh h+a tr#ng g3i #rg.jgrapht.$5)#. 2- _hGn tIch *4 ng"Jn c$a t'p HelloJGraphT.java & h+c cch %hgi tN# *9t %i&" J th5 -n gi/n. ZBa i ch-ng trnh HelloJGraphT.java thD* .t *9t 7 Onh( thD* .t cNnh( dng cc i tng %hc g Onh( v.vz M- Fma trDn .i p( vi:t ch-ng trnh %hgi tN# cc %i&" J th5 %hcP c3 hng( c3 tr+ng 7( v.vz P- M* hi&" cch 7B dCng cc lp tr#ng g3i #rg.jgrapht.alg v vi:t ch-ng trnh *inh h+a gi/i *9t 7 .i t#n i&n hnh trDn J th5 dng cc th"t gi/i 4 c tri&n %hai tr#ng g3i nH.

JG,10$T
About JGraphT J2raphM i7 a Ar@@ Java graph li.rarH that pr#vid@7 *ath@*atical graphXth@#rH #.j@ct7 and alg#rith*7. J2raphM 7"pp#rt7 vari#"7 tHp@7 #A graph7 incl"dingP
-

!),>#+>! and %n!),>#+>! graph7. graph7 Lith `>)g$+>! Q %n`>)g$+>! Q la.@l@d #r anH "7@rXd@Ain@d @dg@7. vari#"7 @dg@ *"ltiplicitH #pti#n7( incl"dingP 5)<0/>-g,10$5( <%/+)g,10$5( 05>%!=g,10$5. %n<=!)?)1b/> graph7 X all#L *#d"l@7 t# pr#vid@ r@adX#nlH acc@77 t# int@rnal graph7. /)5+>n1b/> graph7 X all#L @rt@rnal li7t@n@r7 t# trac% *#diAicati#n @v@nt7. kk

5%bg,10$5 graph7 that ar@ a"t#X"pdating 7".graph vi@L7 #n #th@r graph7. all c#*p#7iti#n7 #A a.#v@ graph7.

Alth#"gh p#L@rA"l( J2raphM i7 d@7ign@d t# .@ 5)<0/> and +@0>-51?> <via Java s g@n@ric7=. K#r @ra*pl@( graph v@rtic@7 can .@ #A anH #.j@ct7. #" can cr@at@ graph7 .a7@d #nP Ztring7( Y7( \Y d#c"*@nt7( @tc{ H#" can @v@n cr@at@ graph7 #A graph7 Mhi7 c#d@ @ra*pl@ 7h#L7 h#L. Wth@r A@at"r@7 #AA@r@d .H J2raphMP
-

graph vi7"aliati#n "7ing th@ J2raph li.rarH <trH thi7 d@*#= c#*pl@t@ 7#"rc@ c#d@ incl"d@d( "nd@r th@ t@r*7 #A th@ 2` Y@77@r 2@n@ral _".lic Yic@n7@. c#*pr@h@n7iv@ Javad#c7. @a7H @rt@n7i.ilitH.

Download #" can d#Lnl#ad th@ lat@7t v@r7i#n #A J2raphM Ar#* th@ pr#j@ct pag@ #n Z#"rc@K#rg@P a)n!=`5 D=`n/=1! A ?_ Ail@ that c#ntain7 7#"rc@ c#d@ and r"nti*@ Ail@7 #A J2raphM. L)n%B D=`n/=1! A tar.g Ail@ that c#ntain7 7#"rc@ c#d@ and r"nti*@ Ail@7 #A J2raphM.

jgraphtX.u.V.ip

jgraphtX .u.V.tar.g

Mh@r@ ar@ tL# d#Lnl#ad7( #n@ A#r ]ind#L7X.a7@d 7H7t@*7( and #n@ A#r Yin"rQnirX.a7@d 7H7t@*7. Mh@ d#Lnl#ad7 c#ntain id@ntical Java 7#"rc@ c#d@ and a AF\.ht*l Ail@ t# h@lp H#" t# g@t 7tart@d. Ztarting Lith v@r7i#n .t.( JF V.x i7 r@!"ir@d at a *ini*"* <@arli@r v@r7i#n7 Lith l@77 A"ncti#nalitH can .@ "7@d #n JF V.k=. M# ta%@ A"ll advantag@ #A J2raphM g@n@ric7 <7tarting Lith v@r7i#n .u.=( "7@ JF V.s #r high@r. Mh@ JavaF#c Ail@7 ar@ availa.l@ #nlin@. Mh@H ar@ al7# incl"d@d in th@ d#Lnl#ad7 7# H#" can vi@L th@* l#callH. JGraphT and JGraph J2raphM and J2raph ar@ tL# diAA@r@nt li.rari@7 Lhich ar@ #pti*i@d A#r diAA@r@nt p"rp#7@7. J2raphMP i7 #pti*i@d A#r data *#d@l7 and alg#rith*7. ha7 a cl@an and 7i*pl@ A_? that i7 d@7ign@d A#r 7aA@ a"t#Xc#*pl@t@ pr#gra**ing. i7 d@7ign@d t# 7"pp#rt highXp@rA#r*anc@ and larg@X7cal@ applicati#n7. kx

can handl@ graph7 Lith a A@L )illi#n* v@rtic@7 and pr#vid@7 vi7"aliati#n7 .H "7ing J2raph <d@*#=.

@dg@7.

J2raphP i7 a 7LingX7tHl@ graph c#*p#n@nt #pti*i@d A#r vi7"aliati#n and 2?X.a7@d @diting. ha7 a *#r@ c#*plicat@d A_? Lith n#nXtrivial ca7ting and 7Ling d@p@nd@ncH{ r@!"ir@7 Al"@ncH Lith it7 d#c"*@ntati#n. i7 7l#L@r and c#n7"*@7 *#r@ r@7#"rc@7. Mh@ tL# li.rari@7 ar@ c#*pl@*@ntarH and can .@ "7@d t#g@th@r. #" Lill pr#.a.lH Aind J2raphM @a7i@r t# 7tart Lith and *#r@ @ligi.l@ A#r H#"r data *#d@l. ]h@n H#" n@@d graph vi7"aliati#n7( H#" can add J2raph t# d# th@* A#r H#".

ks

JG,10$T i7 a Ar@@ Java cla77 li.rarH that pr#vid@7 *ath@*atical graphXth@#rH #.j@ct7 and alg#rith*7. Mhi7 i7 an #p@nX7#"rc@ java graph li.rarH that 7"pp#rt7 a rich gall@rH #A graph7 and i7 d@7ign@d t# .@ p#L@rA"l( @rt@n7i.l@ and @a7H t# "7@.
H1#(1g>5 =,gb:g,10$+ =,gb:g,10$+b1/g =,gb:g,10$+b1/gb%+)/ =,gb:g,10$+b!><= =,gb:g,10$+b>&>n+ =,gb:g,10$+b>B+ =,gb:g,10$+bg,10$ Mh@ Ar#ntX@nd A_?7 int@rAac@7 and cla77@7( incl"ding Graph( DirectedGraph and UndirectedGraph. Alg#rith*7 pr#vid@d Lith JG,10$T. tiliti@7 "7@d .H J2raphM alg#rith*7. F@*# pr#gra*7 that h@lp t# g@t 7tart@d Lith JG,10$T. v@nt cla77@7 and li7t@n@r int@rAac@7( "7@d t# pr#vid@ a chang@ n#tiAicati#n *@chani7* #n graph *#diAicati#n @v@nt7. rt@n7i#n7 and int@grati#n *@an7 t# #th@r pr#d"ct7. ?*pl@*@ntati#n7 #A vari#"7 graph7. `#nXgraphX7p@ciAic data 7tr"ct"r@7( alg#rith*7( and "tiliti@7 "7@d .H JG,10$T.

=,gb:g,10$+bg>n>,1+> 2@n@rat#r7 A#r graph7 #A vari#"7 t#p#l#gi@7. =,gb:g,10$+b+,1&>,5> 2raph trav@r7al *@an7. =,gb:g,10$+b%+)/

Package org.jgrapht.demo F@*# pr#gra*7 that h@lp t# g@t 7tart@d Lith JG,10$T. C/155 N%<<1,@ HelloJGraphT JGraphAdapterDemo PerformanceDemo A 7i*pl@ intr#d"cti#n t# "7ing J2raphM. A d@*# appl@t that 7h#L7 h#L t# "7@ J2raph t# vi7"ali@ J2raphM graph7. A 7i*pl@ d@*# t# t@7t *@*#rH and C_ c#n7"*pti#n #n a graph Lith k *illi#n @l@*@nt7.

Package org.jgrapht.alg Alg#rith*7 pr#vid@d Lith JG,10$T. C/155 N%<<1,@ BellmanFordShorte tPath!"#$% Bellman-Ford algorithmP L@ight7 c#"ld .@ kt

n@gativ@( path7 c#"ld .@ c#n7train@d .H a *ari*"* n"*.@r #A @dg@7. Bron&erbo ch'l()ueF(nder!"#$% Mhi7 cla77 i*pl@*@nt7 ^r#nX@r.#7ch cli!"@ d@t@cti#n alg#rith* a7 it i7 d@7cri.@d in Za*"drala .(\#"lt J.PA 2raphXth@#r@tic Alg#rith* A#r c#*parativ@ \#d@ling #A _r#t@in Ztr"ct"r@{ J.\#l. All#L7 #.taining vari#"7 c#nn@ctivitH a7p@ct7 #A a graph. _@rA#r*7 cHcl@ d@t@cti#n #n a graph. An i*pl@*@ntati#n #A Dijkstra's shortest path algorithm "7ing >losestSirstKterator. \aintain7 a cach@ #A @ach v@rt@r7 n@igh.#r7. \aintain7 a cach@ #A @ach v@rt@r7 n@igh.#r7.

'onnect(*(t+,n pector!"#$% '+cleDetector!"#$% D(jk traShorte tPath!"#$% D(rected-e(ghbor,nde.!"#$% -e(ghbor,nde.!"#$%

C#*pl@*@nt7 th@ Connecti it!"nspector cla77 Lith Strong'onnect(*(t+,n pector!"#$% th@ capa.ilitH t# c#*p"t@ th@ 7tr#nglH c#nn@ct@d c#*p#n@nt7 #A a dir@ct@d graph. "erte.'o*er Package org.jgrapht.tra*er e 2raph trav@r7al *@an7. In+>,?1#> N%<<1,@ Graph,terator!"#$% A graph it@rat#r. C/155 N%<<1,@ Ab tractGraph,terator!"#$% BreadthF(r t,terator!"#$% 'lo e tF(r t,terator!"#$% 'ro 'omponent,terator!"#$#D% An @*ptH i*pl@*@ntati#n #A a graph it@rat#r t# *ini*i@ th@ @AA#rt r@!"ir@d t# i*pl@*@nt graph it@rat#r7. A .r@adthXAir7t it@rat#r A#r a dir@ct@d and an "ndir@ct@d graph. A cl#7@7tXAir7t it@rat#r A#r a dir@ct@d #r "ndir@ct@d graph. _r#vid@7 a cr#77Xc#nn@ct@dXc#*p#n@nt trav@r7al A"ncti#nalitH A#r it@rat#r 7".cla77@7. A d@pthXAir7t it@rat#r A#r a dir@ct@d and an "ndir@ct@d graph. ?*pl@*@nt7 t#p#l#gical #rd@r trav@r7al A#r a dir@ct@d graph. Alg#rith*7 t# Aind a v@rt@r c#v@r A#r a graph.

DepthF(r t,terator!"#$% Topolog(cal/rder,terator!"#$%

ku

An%< N%<<1,@ 'ro 'omponent,terator."( (t'olor Ztandard v@rt@r vi7it 7tat@ @n"*@rati#n.

kv

You might also like