HHaasshh TTaabblleess aanndd SSeettss 
DDiiccttiioonnaarriieess,, HHaasshh TTaabblleess,, CCoolllliissiioonnss RReessoolluuttiioonn,, SSeettss 
SSvveettlliinn NNaakkoovv 
TTeelleerriikk CCoorrppoorraattiioonn 
wwwwww..tteelleerriikk..ccoomm
TTaabbllee ooff CCoonntteennttss 
11.. DDiiccttiioonnaarriieess 
22.. HHaasshh TTaabblleess 
33.. DDiiccttiioonnaarryy<<TTKKeeyy,, TTVVaalluuee>> CCllaassss 
44.. SSeettss 
2
DDiiccttiioonnaarriieess 
DDaattaa SSttrruuccttuurreess tthhaatt MMaapp KKeeyyss ttoo VVaalluueess
TThhee DDiiccttiioonnaarryy ((MMaapp)) AADDTT 
 TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""ddiiccttiioonnaarryy"" mmaappss 
kkeeyy ttoo vvaalluueess 
AAllssoo kknnoowwnn aass ""mmaapp"" oorr ""aassssoocciiaattiivvee aarrrraayy"" 
CCoonnttaaiinnss aa sseett ooff ((kkeeyy,, vvaalluuee)) ppaaiirrss 
 DDiiccttiioonnaarryy AADDTT ooppeerraattiioonnss:: 
AAdddd((kkeeyy,, vvaalluuee)) 
FFiinnddBByyKKeeyy((kkeeyy))  vvaalluuee 
DDeelleettee((kkeeyy)) 
 CCaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss 
LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ...... 
4
AADDTT DDiiccttiioonnaarryy –– EExxaammppllee 
 EExxaammppllee ddiiccttiioonnaarryy:: 
5 
KKeeyy VVaalluuee 
CC## Modern object-oriented programming 
llaanngguuaaggee ffoorr tthhee MMiiccrroossoofftt ..NNEETT ppllaattffoorrmm 
CCLLRR 
CCoommmmoonn LLaanngguuaaggee RRuunnttiimmee –– eexxeeccuuttiioonn 
eennggiinnee ffoorr ..NNEETT aasssseemmbblliieess,, iinntteeggrraall ppaarrtt 
ooff ..NNEETT FFrraammeewwoorrkk 
ccoommppiilleerr Software that transforms a computer 
pprrooggrraamm ttoo eexxeeccuuttaabbllee mmaacchhiinnee ccooddee 
…… ……
HHaasshh TTaabblleess 
WWhhaatt iiss HHaasshh TTaabbllee?? HHooww iitt WWoorrkkss??
HHaasshh TTaabbllee 
AA hhaasshh ttaabbllee iiss aann aarrrraayy tthhaatt hhoollddss aa sseett ooff 
((kkeeyy,, vvaalluuee)) ppaaiirrss 
 TThhee pprroocceessss ooff mmaappppiinngg aa kkeeyy ttoo aa ppoossiittiioonn iinn aa 
ttaabbllee iiss ccaalllleedd hhaasshhiinngg 
0 1 2 3 4 5 … m-1 
…… …… …… …… …… …… …… …… 
T 
hh((kk)) HHaasshh ttaabbllee 
ooff ssiizzee mm 
HHaasshh ffuunnccttiioonn 
hh:: kk →→ 00 …… mm--11 
7
Hash FFuunnccttiioonnss aanndd HHaasshhiinngg 
 AA hhaasshh ttaabbllee hhaass mm sslloottss,, iinnddeexxeedd ffrroomm 00 ttoo mm--11 
 AA hhaasshh ffuunnccttiioonn hh((kk)) mmaappss kkeeyyss ttoo ppoossiittiioonnss:: 
hh:: kk →→ 00 …… mm--11 
 FFoorr aannyy vvaalluuee kk iinn tthhee kkeeyy rraannggee aanndd ssoommee hhaasshh 
ffuunnccttiioonn hh wwee hhaavvee hh((kk)) == pp aanndd 00 ≤≤ pp << mm 
0 1 2 3 4 5 … m-1 
…… …… …… …… …… …… …… …… 
T 
hh((kk)) 
8
HHaasshhiinngg FFuunnccttiioonnss 
 PPeerrffeecctt hhaasshhiinngg ffuunnccttiioonn ((PPHHFF)) 
hh((kk)) :: oonnee--ttoo--oonnee mmaappppiinngg ooff eeaacchh kkeeyy kk ttoo aann 
iinntteeggeerr iinn tthhee rraannggee [[00,, mm--11]] 
TThhee PPHHFF mmaappss eeaacchh kkeeyy ttoo aa ddiissttiinncctt iinntteeggeerr 
wwiitthhiinn ssoommee mmaannaaggeeaabbllee rraannggee 
 FFiinnddiinngg aa ppeerrffeecctt hhaasshhiinngg ffuunnccttiioonn iiss iinn mmoosstt 
ccaasseess iimmppoossssiibbllee 
MMoorree rreeaalliissttiiccaallllyy 
HHaasshh ffuunnccttiioonn hh((kk)) tthhaatt mmaappss mmoosstt ooff tthhee kkeeyyss 
oonnttoo uunniiqquuee iinntteeggeerrss,, bbuutt nnoott aallll 
9
CCoolllliissiioonnss iinn aa HHaasshh TTaabbllee 
AA ccoolllliissiioonn iiss tthhee ssiittuuaattiioonn wwhheenn ddiiffffeerreenntt kkeeyyss 
hhaavvee tthhee ssaammee hhaasshh vvaalluuee 
hh((kk11)) == hh((kk22)) ffoorr kk11 ≠≠ kk22 
WWhheenn tthhee nnuummbbeerr ooff ccoolllliissiioonnss iiss ssuuffffiicciieennttllyy 
ssmmaallll,, tthhee hhaasshh ttaabblleess wwoorrkk qquuiittee wweellll ((ffaasstt)) 
 SSeevveerraall ccoolllliissiioonnss rreessoolluuttiioonn ssttrraatteeggiieess eexxiisstt 
CChhaaiinniinngg iinn aa lliisstt 
UUssiinngg tthhee nneeiigghhbboorriinngg sslloottss ((lliinneeaarr pprroobbiinngg)) 
RRee--hhaasshhiinngg 
...... 
10
CCoolllliissiioonn RReessoolluuttiioonn:: CChhaaiinniinngg 
hh((""PPeesshhoo"")) == 44 
hh((""KKiirroo"")) == 22 
hh((""MMiimmii"")) == 11 
hh((""IIvvaann"")) == 22 
hh((""LLiillii"")) == mm--11 
0 1 2 3 4 … m-1 
Kiro 
Ivan 
null 
Mimi 
null 
Lili 
null 
Pesho 
null 
ccoolllliissiioonn 
CChhaaiinniinngg 
eelleemmeennttss iinn 
ccaassee ooff ccoolllliissiioonn 
nnuullll …… …… nnuullll …… …… …… 
T 
11
HHaasshh TTaabblleess aanndd EEffffiicciieennccyy 
HHaasshh ttaabblleess aarree tthhee mmoosstt eeffffiicciieenntt 
iimmpplleemmeennttaattiioonn ooff AADDTT ""ddiiccttiioonnaarryy"" 
AAdddd // FFiinndd // DDeelleettee ttaakkee jjuusstt ffeeww pprriimmiittiivvee 
ooppeerraattiioonnss 
SSppeeeedd ddooeess nnoott ddeeppeenndd oonn tthhee ssiizzee ooff tthhee hhaasshh-- 
ttaabbllee ((ccoonnssttaanntt ttiimmee)) 
EExxaammppllee:: ffiinnddiinngg aann eelleemmeenntt iinn aa hhaasshh--ttaabbllee 
wwiitthh 11 000000 000000 eelleemmeennttss,, ttaakkeess jjuusstt ffeeww sstteeppss 
FFiinnddiinngg aann eelleemmeenntt iinn aarrrraayy ooff 11 000000 000000 eelleemmeennttss 
ttaakkeess aavveerraaggee 50000 000000 sstteeppss 
12
Dictionaries –– IInntteerrffaacceess aanndd 
IImmpplleemmeennttaattiioonnss 
13
HHaasshh TTaabblleess iinn CC## 
TThhee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> CCllaassss
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> 
 IImmpplleemmeennttss tthhee AADDTT ddiiccttiioonnaarryy aass hhaasshh ttaabbllee 
 SSiizzee iiss ddyynnaammiiccaallllyy iinnccrreeaasseedd aass nneeeeddeedd 
 CCoonnttaaiinnss aa ccoolllleeccttiioonn ooff kkeeyy--vvaalluuee ppaaiirrss 
 CCoolllliissiioonnss aarree rreessoollvveedd bbyy cchhaaiinniinngg 
 EElleemmeennttss hhaavvee aallmmoosstt rraannddoomm oorrddeerr 
 OOrrddeerreedd bbyy tthhee hhaasshh ccooddee ooff tthhee kkeeyy 
 DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn 
 OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss 
 OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee 
hhaasshh ccooddeess ooff tthhee kkeeyyss 
15
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((22)) 
MMaajjoorr ooppeerraattiioonnss:: 
 AAdddd((TTKKeeyy,,TTVVaalluuee)) –– aaddddss aann eelleemmeenntt wwiitthh 
tthhee ssppeecciiffiieedd kkeeyy aanndd vvaalluuee 
 RReemmoovvee((TTKKeeyy)) –– rreemmoovveess tthhee eelleemmeenntt bbyy kkeeyy 
 tthhiiss[[]] –– ggeett//aadddd//rreeppllaaccee ooff eelleemmeenntt bbyy kkeeyy 
 CClleeaarr(()) –– rreemmoovveess aallll eelleemmeennttss 
 CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss 
 KKeeyyss –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee kkeeyyss 
VVaalluueess –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee vvaalluueess 
16
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((33)) 
 MMaajjoorr ooppeerraattiioonnss:: 
 CCoonnttaaiinnssKKeeyy((TTKKeeyy)) –– cchheecckkss wwhheetthheerr tthhee 
ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn kkeeyy 
 CCoonnttaaiinnssVVaalluuee((TTVVaalluuee)) –– cchheecckkss wwhheetthheerr 
tthhee ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn vvaalluuee 
 WWaarrnniinngg:: ssllooww ooppeerraattiioonn!! 
 TTrryyGGeettVVaalluuee((TTKKeeyy,, oouutt TTVVaalluuee)) 
 IIff tthhee kkeeyy iiss ffoouunndd,, rreettuurrnnss iitt iinn tthhee TTVVaalluuee 
 OOtthheerrwwiissee rreettuurrnnss ffaallssee 
17
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> –– 
EExxaammppllee 
DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> ssttuuddeennttssMMaarrkkss == 
nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; 
ssttuuddeennttssMMaarrkkss..AAdddd((""IIvvaann"",, 44));; 
ssttuuddeennttssMMaarrkkss..AAdddd((""PPeetteerr"",, 66));; 
ssttuuddeennttssMMaarrkkss..AAdddd((""MMaarriiaa"",, 66));; 
ssttuuddeennttssMMaarrkkss..AAdddd((""GGeeoorrggee"",, 55));; 
iinntt ppeetteerrMMaarrkk == ssttuuddeennttssMMaarrkkss[[""PPeetteerr""]];; 
CCoonnssoollee..WWrriitteeLLiinnee((""PPeetteerr''ss mmaarrkk:: {{00}}"",, ppeetteerrMMaarrkk));; 
CCoonnssoollee..WWrriitteeLLiinnee((""IIss PPeetteerr iinn tthhee hhaasshh ttaabbllee:: {{00}}"",, 
ssttuuddeennttssMMaarrkkss..CCoonnttaaiinnssKKeeyy((""PPeetteerr""))));; 
CCoonnssoollee..WWrriitteeLLiinnee((""SSttuuddeennttss aanndd ggrraaddeess::""));; 
ffoorreeaacchh ((vvaarr ppaaiirr iinn ssttuuddeennttssMMaarrkkss)) 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} ---->> {{11}}"",, ppaaiirr..KKeeyy,, 
ppaaiirr..VVaalluuee));; 
}} 
18
DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> 
LLiivvee DDeemmoo
CCoouunnttiinngg tthhee WWoorrddss iinn aa TTeexxtt 
ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";; 
IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt == 
nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; 
ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt(('' '',, '',,'',, ''..''));; 
ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss)) 
{{ 
iinntt ccoouunntt == 11;; 
iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd)))) 
ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;; 
wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;; 
}} 
ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt)) 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));; 
}} 
20
BBaallaanncceedd TTrreeee DDiiccttiioonnaarriieess 
TThhee SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> CCllaassss
SSoorrtteeddDDiiccttiioonnaarryy 
<<TTKKeeyy,,TTVVaalluuee>> 
 SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> 
iimmpplleemmeennttss tthhee AADDTT ""ddiiccttiioonnaarryy"" aass sseellff-- 
bbaallaanncciinngg sseeaarrcchh ttrreeee 
EElleemmeennttss aarree aarrrraannggeedd iinn tthhee ttrreeee oorrddeerreedd bbyy kkeeyy 
TTrraavveerrssiinngg tthhee ttrreeee rreettuurrnnss tthhee eelleemmeennttss iinn 
iinnccrreeaassiinngg oorrddeerr 
AAdddd // FFiinndd // DDeelleettee ppeerrffoorrmm lloogg22((nn)) ooppeerraattiioonnss 
UUssee SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> 
wwhheenn yyoouu nneeeedd tthhee eelleemmeennttss ssoorrtteedd 
OOtthheerrwwiissee uussee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> –– iitt 
hhaass bbeetttteerr ppeerrffoorrmmaannccee 
22
CCoouunnttiinngg WWoorrddss ((AAggaaiinn)) 
ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";; 
IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt == 
nneeww SSoorrtteeddDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; 
ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt((' ',, ',,',, '..'));; 
ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss)) 
{{ 
iinntt ccoouunntt == 11;; 
iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd)))) 
ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;; 
wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;; 
}} 
ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt)) 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));; 
}} 
23
CCoommppaarriinngg DDiiccttiioonnaarryy KKeeyyss 
UUssiinngg ccuussttoomm kkeeyy ccllaasssseess iinn DDiiccttiioonnaarryy<<TTKKeeyy,, 
TTVVaalluuee>> aanndd SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>
IICCoommppaarraabbllee<<TT>> 
 DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn 
 OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss 
 OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee 
hhaasshh ccooddeess ooff tthhee kkeeyyss 
 SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn 
IICCoommppaarraabbllee<<TT>> ffoorr oorrddeerriinngg tthhee kkeeyyss 
 BBuuiilltt--iinn ttyyppeess lliikkee iinntt,, lloonngg,, ffllooaatt,, ssttrriinngg 
aanndd DDaatteeTTiimmee aallrreeaaddyy iimmpplleemmeenntt EEqquuaallss(()),, 
GGeettHHaasshhCCooddee(()) aanndd IICCoommppaarraabbllee<<TT>> 
 OOtthheerr ttyyppeess uusseedd wwhheenn uusseedd aass ddiiccttiioonnaarryy kkeeyyss 
sshhoouulldd pprroovviiddee ccuussttoomm iimmpplleemmeennttaattiioonnss 
25
IImmpplleemmeennttiinngg EEqquuaallss(()) aanndd 
GGeettHHaasshhCCooddee(()) 
26 
ppuubblliicc ssttrruucctt PPooiinntt 
{{ 
ppuubblliicc iinntt XX {{ ggeett;; sseett;; }} 
ppuubblliicc iinntt YY {{ ggeett;; sseett;; }} 
ppuubblliicc oovveerrrriiddee bbooooll EEqquuaallss((OObbjjeecctt oobbjj)) 
{{ 
iiff ((!!((oobbjj iiss PPooiinntt)) |||| ((oobbjj ==== nnuullll)))) rreettuurrnn ffaallssee;; 
PPooiinntt pp == ((PPooiinntt))oobbjj;; 
rreettuurrnn ((XX ==== pp..XX)) &&&& ((YY ==== pp..YY));; 
}} 
ppuubblliicc oovveerrrriiddee iinntt GGeettHHaasshhCCooddee(()) 
{{ 
rreettuurrnn ((XX <<<< 1166 || XX >>>> 1166)) ^^ YY;; 
}} 
}}
IImmpplleemmeennttiinngg IICCoommppaarraabbllee<<TT>> 
27 
ppuubblliicc ssttrruucctt PPooiinntt :: IICCoommppaarraabbllee<<PPooiinntt>> 
{{ 
ppuubblliicc iinntt XX {{ ggeett;; sseett;; }} 
ppuubblliicc iinntt YY {{ ggeett;; sseett;; }} 
ppuubblliicc iinntt CCoommppaarreeTToo((PPooiinntt ootthheerrPPooiinntt)) 
{{ 
iiff ((XX !!== ootthheerrPPooiinntt..XX)) 
{{ 
rreettuurrnn tthhiiss..XX..CCoommppaarreeTToo((ootthheerrPPooiinntt..XX));; 
}} 
eellssee 
{{ 
rreettuurrnn tthhiiss..YY..CCoommppaarreeTToo((ootthheerrPPooiinntt..YY));; 
}} 
}} 
}}
SSeettss 
SSeettss ooff EElleemmeennttss
SSeett aanndd BBaagg AADDTTss 
 TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""sseett"" kkeeeeppss aa sseett ooff 
eelleemmeennttss wwiitthh nnoo dduupplliiccaatteess 
 SSeettss wwiitthh dduupplliiccaatteess aarree aallssoo kknnoowwnn aass AADDTT ""bbaagg"" 
 SSeett ooppeerraattiioonnss:: 
AAdddd((eelleemmeenntt)) 
CCoonnttaaiinnss((eelleemmeenntt))  ttrruuee // ffaallssee 
DDeelleettee((eelleemmeenntt)) 
UUnniioonn((sseett)) // IInntteerrsseecctt((sseett)) 
 SSeettss ccaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss 
LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ...... 
29
SSeettss –– IInntteerrffaacceess aanndd 
IImmpplleemmeennttaattiioonnss 
30
HHaasshhSSeett<<TT>> 
 HHaasshhSSeett<<TT>> iimmpplleemmeennttss AADDTT sseett bbyy hhaasshh ttaabbllee 
EElleemmeennttss aarree iinn nnoo ppaarrttiiccuullaarr oorrddeerr 
 AAllll mmaajjoorr ooppeerraattiioonnss aarree ffaasstt:: 
AAdddd((eelleemmeenntt)) –– aappppeennddss aann eelleemmeenntt ttoo tthhee sseett 
DDooeess nnootthhiinngg iiff tthhee eelleemmeenntt aallrreeaaddyy eexxiissttss 
RReemmoovvee((eelleemmeenntt)) –– rreemmoovveess ggiivveenn eelleemmeenntt 
CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss 
UUnniioonnWWiitthh((sseett)) // IInntteerrsseeccttWWiitthh((sseett)) –– 
ppeerrffoorrmmss uunniioonn // iinntteerrsseeccttiioonn wwiitthh aannootthheerr sseett 
31
HHaasshhSSeett<<TT>> –– EExxaammppllee 
32 
IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>(( 
nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));; 
IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>(( 
nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));; 
IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));; 
uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));; 
PPrriinnttSSeett((uunniioonn));; //// SSQQLL JJaavvaa CC## PPHHPP OOrraaccllee MMyySSQQLL 
pprriivvaattee ssttaattiicc vvooiidd PPrriinnttSSeett<<TT>>((IISSeett<<TT>> sseett)) 
{{ 
ffoorreeaacchh ((vvaarr eelleemmeenntt iinn sseett)) 
{{ 
CCoonnssoollee..WWrriittee((""{{00}} "",, eelleemmeenntt));; 
}} 
CCoonnssoollee..WWrriitteeLLiinnee(());; 
}}
SSoorrtteeddSSeett<<TT>> 
 SSoorrtteeddSSeett<<TT>> iimmpplleemmeennttss AADDTT sseett bbyy bbaallaanncceedd 
sseeaarrcchh ttrreeee 
EElleemmeennttss aarree ssoorrtteedd iinn iinnccrreeaassiinngg oorrddeerr 
 EExxaammppllee:: 
33 
IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>(( 
nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));; 
IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>(( 
nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));; 
IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));; 
uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));; 
PPrriinnttSSeett((uunniioonn));; //// CC## JJaavvaa PPHHPP SSQQLL MMyySSQQLL OOrraaccllee
HHaasshhSSeett<<TT>> aanndd 
SSoorrtteeddSSeett<<TT>> 
LLiivvee DDeemmoo
SSuummmmaarryy 
 DDiiccttiioonnaarriieess mmaapp kkeeyy ttoo vvaalluuee 
CCaann bbee iimmpplleemmeenntteedd aass hhaasshh ttaabbllee oorr bbaallaanncceedd 
sseeaarrcchh ttrreeee 
 HHaasshh--ttaabblleess mmaapp kkeeyyss ttoo vvaalluueess 
RReellyy oonn hhaasshh--ffuunnccttiioonnss ttoo ddiissttrriibbuuttee tthhee kkeeyyss iinn tthhee 
ttaabbllee 
CCoolllliissiioonnss nneeeeddss rreessoolluuttiioonn aallggoorriitthhmm ((ee..gg.. 
cchhaaiinniinngg)) 
VVeerryy ffaasstt aadddd // ffiinndd // ddeelleettee 
 SSeettss hhoolldd aa ggrroouupp ooff eelleemmeennttss 
HHaasshh--ttaabbllee oorr bbaallaanncceedd ttrreeee iimmpplleemmeennttaattiioonnss 
35
HHaasshh TTaabblleess aanndd SSeettss 
QQuueessttiioonnss?? 
http://academy.telerik.com
EExxeerrcciisseess 
11.. WWrriittee aa pprrooggrraamm tthhaatt ccoouunnttss iinn aa ggiivveenn aarrrraayy ooff 
iinntteeggeerrss tthhee nnuummbbeerr ooff ooccccuurrrreenncceess ooff eeaacchh iinntteeggeerr.. 
UUssee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>.. 
EExxaammppllee:: aarrrraayy == {{33,, 44,, 44,, 22,, 33,, 33,, 44,, 33,, 22}} 
22  22 ttiimmeess 
33  44 ttiimmeess 
44  33 ttiimmeess 
11.. WWrriittee aa pprrooggrraamm tthhaatt eexxttrraaccttss ffrroomm aa ggiivveenn sseeqquueennccee 
ooff ssttrriinnggss aallll eelleemmeennttss tthhaatt pprreesseenntt iinn iitt oodddd nnuummbbeerr 
ooff ttiimmeess.. EExxaammppllee:: 
{{CC##,, SSQQLL,, PPHHPP,, PPHHPP,, SSQQLL,, SSQQLL }}  {{CC##,, SSQQLL}} 
37
EExxeerrcciisseess ((22)) 
33.. WWrriittee aa pprrooggrraamm tthhaatt ccoouunnttss hhooww mmaannyy ttiimmeess eeaacchh 
wwoorrdd ffrroomm ggiivveenn tteexxtt ffiillee wwoorrddss..ttxxtt aappppeeaarrss iinn iitt.. 
TThhee cchhaarraacctteerr ccaassiinngg ddiiffffeerreenncceess sshhoouulldd bbee iiggnnoorreedd.. 
TThhee rreessuulltt wwoorrddss sshhoouulldd bbee oorrddeerreedd bbyy tthheeiirr nnuummbbeerr 
ooff ooccccuurrrreenncceess iinn tthhee tteexxtt.. EExxaammppllee:: 
iiss  22 
tthhee  22 
tthhiiss  33 
tteexxtt  66 
38 
TThhiiss iiss tthhee TTEEXXTT.. TTeexxtt,, tteexxtt,, tteexxtt –– TTHHIISS TTEEXXTT!! 
IIss tthhiiss tthhee tteexxtt??
EExxeerrcciisseess ((33)) 
39 
44.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""hhaasshh ttaabbllee"" iinn aa ccllaassss 
HHaasshhTTaabbllee<<KK,,TT>>.. KKeeeepp tthhee ddaattaa iinn aarrrraayy ooff lliissttss ooff kkeeyy-- 
vvaalluuee ppaaiirrss ((LLiinnkkeeddLLiisstt<<KKeeyyVVaalluueePPaaiirr<<KK,,TT>>>>[[]]) wwiitthh 
iinniittiiaall ccaappaacciittyy ooff 1166.. WWhheenn tthhee hhaasshh ttaabbllee llooaadd rruunnss 
oovveerr 7755%%,, ppeerrffoorrmm rreessiizziinngg ttoo 22 ttiimmeess llaarrggeerr ccaappaacciittyy.. 
IImmpplleemmeenntt tthhee ffoolllloowwiinngg mmeetthhooddss aanndd pprrooppeerrttiieess:: 
AAdddd((kkeeyy,, vvaalluuee)),, Fiinndd((kkeeyy))vvaalluuee,, 
RReemmoovvee(( kkeeyy)),, CCoouunntt,, CClleeaarr(()),, tthhiiss[[]],, KKeeyyss.. TTrryy 
ttoo mmaakkee tthhee hhaasshh ttaabbllee ttoo ssuuppppoorrtt iitteerraattiinngg oovveerr iittss 
eelleemmeennttss wwiitthh ffoorreeaacchh.. 
55.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""sseett"" iinn aa ccllaassss 
HHaasshheeddSSeett<<TT>> uussiinngg yyoouurr ccllaassss HHaasshhTTaabbllee<<TT,,TT>> ttoo 
hhoolldd tthhee eelleemmeennttss.. IImmpplleemmeenntt aallll ssttaannddaarrdd sseett 
ooppeerraattiioonnss lliikkee AAdddd((TT)),, Fiinndd((TT)),, RReemmoovvee((TT)),, CCoouunntt,, 
CClleeaarr(()),, uunniioonn aanndd iinntteerrsseecctt..

18 Hash tables and sets

  • 1.
    HHaasshh TTaabblleess aannddSSeettss DDiiccttiioonnaarriieess,, HHaasshh TTaabblleess,, CCoolllliissiioonnss RReessoolluuttiioonn,, SSeettss SSvveettlliinn NNaakkoovv TTeelleerriikk CCoorrppoorraattiioonn wwwwww..tteelleerriikk..ccoomm
  • 2.
    TTaabbllee ooff CCoonntteennttss 11.. DDiiccttiioonnaarriieess 22.. HHaasshh TTaabblleess 33.. DDiiccttiioonnaarryy<<TTKKeeyy,, TTVVaalluuee>> CCllaassss 44.. SSeettss 2
  • 3.
    DDiiccttiioonnaarriieess DDaattaa SSttrruuccttuurreesstthhaatt MMaapp KKeeyyss ttoo VVaalluueess
  • 4.
    TThhee DDiiccttiioonnaarryy ((MMaapp))AADDTT  TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""ddiiccttiioonnaarryy"" mmaappss kkeeyy ttoo vvaalluueess AAllssoo kknnoowwnn aass ""mmaapp"" oorr ""aassssoocciiaattiivvee aarrrraayy"" CCoonnttaaiinnss aa sseett ooff ((kkeeyy,, vvaalluuee)) ppaaiirrss  DDiiccttiioonnaarryy AADDTT ooppeerraattiioonnss:: AAdddd((kkeeyy,, vvaalluuee)) FFiinnddBByyKKeeyy((kkeeyy))  vvaalluuee DDeelleettee((kkeeyy))  CCaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ...... 4
  • 5.
    AADDTT DDiiccttiioonnaarryy ––EExxaammppllee  EExxaammppllee ddiiccttiioonnaarryy:: 5 KKeeyy VVaalluuee CC## Modern object-oriented programming llaanngguuaaggee ffoorr tthhee MMiiccrroossoofftt ..NNEETT ppllaattffoorrmm CCLLRR CCoommmmoonn LLaanngguuaaggee RRuunnttiimmee –– eexxeeccuuttiioonn eennggiinnee ffoorr ..NNEETT aasssseemmbblliieess,, iinntteeggrraall ppaarrtt ooff ..NNEETT FFrraammeewwoorrkk ccoommppiilleerr Software that transforms a computer pprrooggrraamm ttoo eexxeeccuuttaabbllee mmaacchhiinnee ccooddee …… ……
  • 6.
    HHaasshh TTaabblleess WWhhaattiiss HHaasshh TTaabbllee?? HHooww iitt WWoorrkkss??
  • 7.
    HHaasshh TTaabbllee AAhhaasshh ttaabbllee iiss aann aarrrraayy tthhaatt hhoollddss aa sseett ooff ((kkeeyy,, vvaalluuee)) ppaaiirrss  TThhee pprroocceessss ooff mmaappppiinngg aa kkeeyy ttoo aa ppoossiittiioonn iinn aa ttaabbllee iiss ccaalllleedd hhaasshhiinngg 0 1 2 3 4 5 … m-1 …… …… …… …… …… …… …… …… T hh((kk)) HHaasshh ttaabbllee ooff ssiizzee mm HHaasshh ffuunnccttiioonn hh:: kk →→ 00 …… mm--11 7
  • 8.
    Hash FFuunnccttiioonnss aannddHHaasshhiinngg  AA hhaasshh ttaabbllee hhaass mm sslloottss,, iinnddeexxeedd ffrroomm 00 ttoo mm--11  AA hhaasshh ffuunnccttiioonn hh((kk)) mmaappss kkeeyyss ttoo ppoossiittiioonnss:: hh:: kk →→ 00 …… mm--11  FFoorr aannyy vvaalluuee kk iinn tthhee kkeeyy rraannggee aanndd ssoommee hhaasshh ffuunnccttiioonn hh wwee hhaavvee hh((kk)) == pp aanndd 00 ≤≤ pp << mm 0 1 2 3 4 5 … m-1 …… …… …… …… …… …… …… …… T hh((kk)) 8
  • 9.
    HHaasshhiinngg FFuunnccttiioonnss PPeerrffeecctt hhaasshhiinngg ffuunnccttiioonn ((PPHHFF)) hh((kk)) :: oonnee--ttoo--oonnee mmaappppiinngg ooff eeaacchh kkeeyy kk ttoo aann iinntteeggeerr iinn tthhee rraannggee [[00,, mm--11]] TThhee PPHHFF mmaappss eeaacchh kkeeyy ttoo aa ddiissttiinncctt iinntteeggeerr wwiitthhiinn ssoommee mmaannaaggeeaabbllee rraannggee  FFiinnddiinngg aa ppeerrffeecctt hhaasshhiinngg ffuunnccttiioonn iiss iinn mmoosstt ccaasseess iimmppoossssiibbllee MMoorree rreeaalliissttiiccaallllyy HHaasshh ffuunnccttiioonn hh((kk)) tthhaatt mmaappss mmoosstt ooff tthhee kkeeyyss oonnttoo uunniiqquuee iinntteeggeerrss,, bbuutt nnoott aallll 9
  • 10.
    CCoolllliissiioonnss iinn aaHHaasshh TTaabbllee AA ccoolllliissiioonn iiss tthhee ssiittuuaattiioonn wwhheenn ddiiffffeerreenntt kkeeyyss hhaavvee tthhee ssaammee hhaasshh vvaalluuee hh((kk11)) == hh((kk22)) ffoorr kk11 ≠≠ kk22 WWhheenn tthhee nnuummbbeerr ooff ccoolllliissiioonnss iiss ssuuffffiicciieennttllyy ssmmaallll,, tthhee hhaasshh ttaabblleess wwoorrkk qquuiittee wweellll ((ffaasstt))  SSeevveerraall ccoolllliissiioonnss rreessoolluuttiioonn ssttrraatteeggiieess eexxiisstt CChhaaiinniinngg iinn aa lliisstt UUssiinngg tthhee nneeiigghhbboorriinngg sslloottss ((lliinneeaarr pprroobbiinngg)) RRee--hhaasshhiinngg ...... 10
  • 11.
    CCoolllliissiioonn RReessoolluuttiioonn:: CChhaaiinniinngg hh((""PPeesshhoo"")) == 44 hh((""KKiirroo"")) == 22 hh((""MMiimmii"")) == 11 hh((""IIvvaann"")) == 22 hh((""LLiillii"")) == mm--11 0 1 2 3 4 … m-1 Kiro Ivan null Mimi null Lili null Pesho null ccoolllliissiioonn CChhaaiinniinngg eelleemmeennttss iinn ccaassee ooff ccoolllliissiioonn nnuullll …… …… nnuullll …… …… …… T 11
  • 12.
    HHaasshh TTaabblleess aannddEEffffiicciieennccyy HHaasshh ttaabblleess aarree tthhee mmoosstt eeffffiicciieenntt iimmpplleemmeennttaattiioonn ooff AADDTT ""ddiiccttiioonnaarryy"" AAdddd // FFiinndd // DDeelleettee ttaakkee jjuusstt ffeeww pprriimmiittiivvee ooppeerraattiioonnss SSppeeeedd ddooeess nnoott ddeeppeenndd oonn tthhee ssiizzee ooff tthhee hhaasshh-- ttaabbllee ((ccoonnssttaanntt ttiimmee)) EExxaammppllee:: ffiinnddiinngg aann eelleemmeenntt iinn aa hhaasshh--ttaabbllee wwiitthh 11 000000 000000 eelleemmeennttss,, ttaakkeess jjuusstt ffeeww sstteeppss FFiinnddiinngg aann eelleemmeenntt iinn aarrrraayy ooff 11 000000 000000 eelleemmeennttss ttaakkeess aavveerraaggee 50000 000000 sstteeppss 12
  • 13.
    Dictionaries –– IInntteerrffaacceessaanndd IImmpplleemmeennttaattiioonnss 13
  • 14.
    HHaasshh TTaabblleess iinnCC## TThhee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> CCllaassss
  • 15.
    DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>  IImmpplleemmeennttsstthhee AADDTT ddiiccttiioonnaarryy aass hhaasshh ttaabbllee  SSiizzee iiss ddyynnaammiiccaallllyy iinnccrreeaasseedd aass nneeeeddeedd  CCoonnttaaiinnss aa ccoolllleeccttiioonn ooff kkeeyy--vvaalluuee ppaaiirrss  CCoolllliissiioonnss aarree rreessoollvveedd bbyy cchhaaiinniinngg  EElleemmeennttss hhaavvee aallmmoosstt rraannddoomm oorrddeerr  OOrrddeerreedd bbyy tthhee hhaasshh ccooddee ooff tthhee kkeeyy  DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn  OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss  OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee hhaasshh ccooddeess ooff tthhee kkeeyyss 15
  • 16.
    DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((22)) MMaajjoorrooppeerraattiioonnss::  AAdddd((TTKKeeyy,,TTVVaalluuee)) –– aaddddss aann eelleemmeenntt wwiitthh tthhee ssppeecciiffiieedd kkeeyy aanndd vvaalluuee  RReemmoovvee((TTKKeeyy)) –– rreemmoovveess tthhee eelleemmeenntt bbyy kkeeyy  tthhiiss[[]] –– ggeett//aadddd//rreeppllaaccee ooff eelleemmeenntt bbyy kkeeyy  CClleeaarr(()) –– rreemmoovveess aallll eelleemmeennttss  CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss  KKeeyyss –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee kkeeyyss VVaalluueess –– rreettuurrnnss aa ccoolllleeccttiioonn ooff tthhee vvaalluueess 16
  • 17.
    DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> ((33)) MMaajjoorr ooppeerraattiioonnss::  CCoonnttaaiinnssKKeeyy((TTKKeeyy)) –– cchheecckkss wwhheetthheerr tthhee ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn kkeeyy  CCoonnttaaiinnssVVaalluuee((TTVVaalluuee)) –– cchheecckkss wwhheetthheerr tthhee ddiiccttiioonnaarryy ccoonnttaaiinnss ggiivveenn vvaalluuee  WWaarrnniinngg:: ssllooww ooppeerraattiioonn!!  TTrryyGGeettVVaalluuee((TTKKeeyy,, oouutt TTVVaalluuee))  IIff tthhee kkeeyy iiss ffoouunndd,, rreettuurrnnss iitt iinn tthhee TTVVaalluuee  OOtthheerrwwiissee rreettuurrnnss ffaallssee 17
  • 18.
    DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> –– EExxaammppllee DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> ssttuuddeennttssMMaarrkkss == nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; ssttuuddeennttssMMaarrkkss..AAdddd((""IIvvaann"",, 44));; ssttuuddeennttssMMaarrkkss..AAdddd((""PPeetteerr"",, 66));; ssttuuddeennttssMMaarrkkss..AAdddd((""MMaarriiaa"",, 66));; ssttuuddeennttssMMaarrkkss..AAdddd((""GGeeoorrggee"",, 55));; iinntt ppeetteerrMMaarrkk == ssttuuddeennttssMMaarrkkss[[""PPeetteerr""]];; CCoonnssoollee..WWrriitteeLLiinnee((""PPeetteerr''ss mmaarrkk:: {{00}}"",, ppeetteerrMMaarrkk));; CCoonnssoollee..WWrriitteeLLiinnee((""IIss PPeetteerr iinn tthhee hhaasshh ttaabbllee:: {{00}}"",, ssttuuddeennttssMMaarrkkss..CCoonnttaaiinnssKKeeyy((""PPeetteerr""))));; CCoonnssoollee..WWrriitteeLLiinnee((""SSttuuddeennttss aanndd ggrraaddeess::""));; ffoorreeaacchh ((vvaarr ppaaiirr iinn ssttuuddeennttssMMaarrkkss)) {{ CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} ---->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));; }} 18
  • 19.
  • 20.
    CCoouunnttiinngg tthhee WWoorrddssiinn aa TTeexxtt ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";; IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt == nneeww DDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt(('' '',, '',,'',, ''..''));; ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss)) {{ iinntt ccoouunntt == 11;; iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd)))) ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;; wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;; }} ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt)) {{ CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));; }} 20
  • 21.
    BBaallaanncceedd TTrreeee DDiiccttiioonnaarriieess TThhee SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> CCllaassss
  • 22.
    SSoorrtteeddDDiiccttiioonnaarryy <<TTKKeeyy,,TTVVaalluuee>> SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> iimmpplleemmeennttss tthhee AADDTT ""ddiiccttiioonnaarryy"" aass sseellff-- bbaallaanncciinngg sseeaarrcchh ttrreeee EElleemmeennttss aarree aarrrraannggeedd iinn tthhee ttrreeee oorrddeerreedd bbyy kkeeyy TTrraavveerrssiinngg tthhee ttrreeee rreettuurrnnss tthhee eelleemmeennttss iinn iinnccrreeaassiinngg oorrddeerr AAdddd // FFiinndd // DDeelleettee ppeerrffoorrmm lloogg22((nn)) ooppeerraattiioonnss UUssee SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> wwhheenn yyoouu nneeeedd tthhee eelleemmeennttss ssoorrtteedd OOtthheerrwwiissee uussee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> –– iitt hhaass bbeetttteerr ppeerrffoorrmmaannccee 22
  • 23.
    CCoouunnttiinngg WWoorrddss ((AAggaaiinn)) ssttrriinngg tteexxtt == ""aa tteexxtt,, ssoommee tteexxtt,, jjuusstt ssoommee tteexxtt"";; IIDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>> wwoorrddssCCoouunntt == nneeww SSoorrtteeddDDiiccttiioonnaarryy<<ssttrriinngg,, iinntt>>(());; ssttrriinngg[[]] wwoorrddss == tteexxtt..SSpplliitt((' ',, ',,',, '..'));; ffoorreeaacchh ((ssttrriinngg wwoorrdd iinn wwoorrddss)) {{ iinntt ccoouunntt == 11;; iiff ((wwoorrddssCCoouunntt..CCoonnttaaiinnssKKeeyy((wwoorrdd)))) ccoouunntt == wwoorrddssCCoouunntt[[wwoorrdd]] ++ 11;; wwoorrddssCCoouunntt[[wwoorrdd]] == ccoouunntt;; }} ffoorreeaacchh((vvaarr ppaaiirr iinn wwoorrddssCCoouunntt)) {{ CCoonnssoollee..WWrriitteeLLiinnee((""{{00}} -->> {{11}}"",, ppaaiirr..KKeeyy,, ppaaiirr..VVaalluuee));; }} 23
  • 24.
    CCoommppaarriinngg DDiiccttiioonnaarryy KKeeyyss UUssiinngg ccuussttoomm kkeeyy ccllaasssseess iinn DDiiccttiioonnaarryy<<TTKKeeyy,, TTVVaalluuee>> aanndd SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>
  • 25.
    IICCoommppaarraabbllee<<TT>>  DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>rreelliieess oonn  OObbjjeecctt..EEqquuaallss(()) –– ffoorr ccoommppaarriinngg tthhee kkeeyyss  OObbjjeecctt..GGeettHHaasshhCCooddee(()) –– ffoorr ccaallccuullaattiinngg tthhee hhaasshh ccooddeess ooff tthhee kkeeyyss  SSoorrtteeddDDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>> rreelliieess oonn IICCoommppaarraabbllee<<TT>> ffoorr oorrddeerriinngg tthhee kkeeyyss  BBuuiilltt--iinn ttyyppeess lliikkee iinntt,, lloonngg,, ffllooaatt,, ssttrriinngg aanndd DDaatteeTTiimmee aallrreeaaddyy iimmpplleemmeenntt EEqquuaallss(()),, GGeettHHaasshhCCooddee(()) aanndd IICCoommppaarraabbllee<<TT>>  OOtthheerr ttyyppeess uusseedd wwhheenn uusseedd aass ddiiccttiioonnaarryy kkeeyyss sshhoouulldd pprroovviiddee ccuussttoomm iimmpplleemmeennttaattiioonnss 25
  • 26.
    IImmpplleemmeennttiinngg EEqquuaallss(()) aanndd GGeettHHaasshhCCooddee(()) 26 ppuubblliicc ssttrruucctt PPooiinntt {{ ppuubblliicc iinntt XX {{ ggeett;; sseett;; }} ppuubblliicc iinntt YY {{ ggeett;; sseett;; }} ppuubblliicc oovveerrrriiddee bbooooll EEqquuaallss((OObbjjeecctt oobbjj)) {{ iiff ((!!((oobbjj iiss PPooiinntt)) |||| ((oobbjj ==== nnuullll)))) rreettuurrnn ffaallssee;; PPooiinntt pp == ((PPooiinntt))oobbjj;; rreettuurrnn ((XX ==== pp..XX)) &&&& ((YY ==== pp..YY));; }} ppuubblliicc oovveerrrriiddee iinntt GGeettHHaasshhCCooddee(()) {{ rreettuurrnn ((XX <<<< 1166 || XX >>>> 1166)) ^^ YY;; }} }}
  • 27.
    IImmpplleemmeennttiinngg IICCoommppaarraabbllee<<TT>> 27 ppuubblliicc ssttrruucctt PPooiinntt :: IICCoommppaarraabbllee<<PPooiinntt>> {{ ppuubblliicc iinntt XX {{ ggeett;; sseett;; }} ppuubblliicc iinntt YY {{ ggeett;; sseett;; }} ppuubblliicc iinntt CCoommppaarreeTToo((PPooiinntt ootthheerrPPooiinntt)) {{ iiff ((XX !!== ootthheerrPPooiinntt..XX)) {{ rreettuurrnn tthhiiss..XX..CCoommppaarreeTToo((ootthheerrPPooiinntt..XX));; }} eellssee {{ rreettuurrnn tthhiiss..YY..CCoommppaarreeTToo((ootthheerrPPooiinntt..YY));; }} }} }}
  • 28.
    SSeettss SSeettss ooffEElleemmeennttss
  • 29.
    SSeett aanndd BBaaggAADDTTss  TThhee aabbssttrraacctt ddaattaa ttyyppee ((AADDTT)) ""sseett"" kkeeeeppss aa sseett ooff eelleemmeennttss wwiitthh nnoo dduupplliiccaatteess  SSeettss wwiitthh dduupplliiccaatteess aarree aallssoo kknnoowwnn aass AADDTT ""bbaagg""  SSeett ooppeerraattiioonnss:: AAdddd((eelleemmeenntt)) CCoonnttaaiinnss((eelleemmeenntt))  ttrruuee // ffaallssee DDeelleettee((eelleemmeenntt)) UUnniioonn((sseett)) // IInntteerrsseecctt((sseett))  SSeettss ccaann bbee iimmpplleemmeenntteedd iinn sseevveerraall wwaayyss LLiisstt,, aarrrraayy,, hhaasshh ttaabbllee,, bbaallaanncceedd ttrreeee,, ...... 29
  • 30.
    SSeettss –– IInntteerrffaacceessaanndd IImmpplleemmeennttaattiioonnss 30
  • 31.
    HHaasshhSSeett<<TT>>  HHaasshhSSeett<<TT>>iimmpplleemmeennttss AADDTT sseett bbyy hhaasshh ttaabbllee EElleemmeennttss aarree iinn nnoo ppaarrttiiccuullaarr oorrddeerr  AAllll mmaajjoorr ooppeerraattiioonnss aarree ffaasstt:: AAdddd((eelleemmeenntt)) –– aappppeennddss aann eelleemmeenntt ttoo tthhee sseett DDooeess nnootthhiinngg iiff tthhee eelleemmeenntt aallrreeaaddyy eexxiissttss RReemmoovvee((eelleemmeenntt)) –– rreemmoovveess ggiivveenn eelleemmeenntt CCoouunntt –– rreettuurrnnss tthhee nnuummbbeerr ooff eelleemmeennttss UUnniioonnWWiitthh((sseett)) // IInntteerrsseeccttWWiitthh((sseett)) –– ppeerrffoorrmmss uunniioonn // iinntteerrsseeccttiioonn wwiitthh aannootthheerr sseett 31
  • 32.
    HHaasshhSSeett<<TT>> –– EExxaammppllee 32 IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>(( nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));; IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww HHaasshhSSeett<<ssttrriinngg>>(( nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));; IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));; uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));; PPrriinnttSSeett((uunniioonn));; //// SSQQLL JJaavvaa CC## PPHHPP OOrraaccllee MMyySSQQLL pprriivvaattee ssttaattiicc vvooiidd PPrriinnttSSeett<<TT>>((IISSeett<<TT>> sseett)) {{ ffoorreeaacchh ((vvaarr eelleemmeenntt iinn sseett)) {{ CCoonnssoollee..WWrriittee((""{{00}} "",, eelleemmeenntt));; }} CCoonnssoollee..WWrriitteeLLiinnee(());; }}
  • 33.
    SSoorrtteeddSSeett<<TT>>  SSoorrtteeddSSeett<<TT>>iimmpplleemmeennttss AADDTT sseett bbyy bbaallaanncceedd sseeaarrcchh ttrreeee EElleemmeennttss aarree ssoorrtteedd iinn iinnccrreeaassiinngg oorrddeerr  EExxaammppllee:: 33 IISSeett<<ssttrriinngg>> ffiirrssttSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>(( nneeww ssttrriinngg[[]] {{ ""SSQQLL"",, ""JJaavvaa"",, ""CC##"",, ""PPHHPP"" }}));; IISSeett<<ssttrriinngg>> sseeccoonnddSSeett == nneeww SSoorrtteeddSSeett<<ssttrriinngg>>(( nneeww ssttrriinngg[[]] {{ ""OOrraaccllee"",, ""SSQQLL"",, ""MMyySSQQLL"" }}));; IISSeett<<ssttrriinngg>> uunniioonn == nneeww HHaasshhSSeett<<ssttrriinngg>>((ffiirrssttSSeett));; uunniioonn..UUnniioonnWWiitthh((sseeccoonnddSSeett));; PPrriinnttSSeett((uunniioonn));; //// CC## JJaavvaa PPHHPP SSQQLL MMyySSQQLL OOrraaccllee
  • 34.
  • 35.
    SSuummmmaarryy  DDiiccttiioonnaarriieessmmaapp kkeeyy ttoo vvaalluuee CCaann bbee iimmpplleemmeenntteedd aass hhaasshh ttaabbllee oorr bbaallaanncceedd sseeaarrcchh ttrreeee  HHaasshh--ttaabblleess mmaapp kkeeyyss ttoo vvaalluueess RReellyy oonn hhaasshh--ffuunnccttiioonnss ttoo ddiissttrriibbuuttee tthhee kkeeyyss iinn tthhee ttaabbllee CCoolllliissiioonnss nneeeeddss rreessoolluuttiioonn aallggoorriitthhmm ((ee..gg.. cchhaaiinniinngg)) VVeerryy ffaasstt aadddd // ffiinndd // ddeelleettee  SSeettss hhoolldd aa ggrroouupp ooff eelleemmeennttss HHaasshh--ttaabbllee oorr bbaallaanncceedd ttrreeee iimmpplleemmeennttaattiioonnss 35
  • 36.
    HHaasshh TTaabblleess aannddSSeettss QQuueessttiioonnss?? http://academy.telerik.com
  • 37.
    EExxeerrcciisseess 11.. WWrriitteeaa pprrooggrraamm tthhaatt ccoouunnttss iinn aa ggiivveenn aarrrraayy ooff iinntteeggeerrss tthhee nnuummbbeerr ooff ooccccuurrrreenncceess ooff eeaacchh iinntteeggeerr.. UUssee DDiiccttiioonnaarryy<<TTKKeeyy,,TTVVaalluuee>>.. EExxaammppllee:: aarrrraayy == {{33,, 44,, 44,, 22,, 33,, 33,, 44,, 33,, 22}} 22  22 ttiimmeess 33  44 ttiimmeess 44  33 ttiimmeess 11.. WWrriittee aa pprrooggrraamm tthhaatt eexxttrraaccttss ffrroomm aa ggiivveenn sseeqquueennccee ooff ssttrriinnggss aallll eelleemmeennttss tthhaatt pprreesseenntt iinn iitt oodddd nnuummbbeerr ooff ttiimmeess.. EExxaammppllee:: {{CC##,, SSQQLL,, PPHHPP,, PPHHPP,, SSQQLL,, SSQQLL }}  {{CC##,, SSQQLL}} 37
  • 38.
    EExxeerrcciisseess ((22)) 33..WWrriittee aa pprrooggrraamm tthhaatt ccoouunnttss hhooww mmaannyy ttiimmeess eeaacchh wwoorrdd ffrroomm ggiivveenn tteexxtt ffiillee wwoorrddss..ttxxtt aappppeeaarrss iinn iitt.. TThhee cchhaarraacctteerr ccaassiinngg ddiiffffeerreenncceess sshhoouulldd bbee iiggnnoorreedd.. TThhee rreessuulltt wwoorrddss sshhoouulldd bbee oorrddeerreedd bbyy tthheeiirr nnuummbbeerr ooff ooccccuurrrreenncceess iinn tthhee tteexxtt.. EExxaammppllee:: iiss  22 tthhee  22 tthhiiss  33 tteexxtt  66 38 TThhiiss iiss tthhee TTEEXXTT.. TTeexxtt,, tteexxtt,, tteexxtt –– TTHHIISS TTEEXXTT!! IIss tthhiiss tthhee tteexxtt??
  • 39.
    EExxeerrcciisseess ((33)) 39 44.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""hhaasshh ttaabbllee"" iinn aa ccllaassss HHaasshhTTaabbllee<<KK,,TT>>.. KKeeeepp tthhee ddaattaa iinn aarrrraayy ooff lliissttss ooff kkeeyy-- vvaalluuee ppaaiirrss ((LLiinnkkeeddLLiisstt<<KKeeyyVVaalluueePPaaiirr<<KK,,TT>>>>[[]]) wwiitthh iinniittiiaall ccaappaacciittyy ooff 1166.. WWhheenn tthhee hhaasshh ttaabbllee llooaadd rruunnss oovveerr 7755%%,, ppeerrffoorrmm rreessiizziinngg ttoo 22 ttiimmeess llaarrggeerr ccaappaacciittyy.. IImmpplleemmeenntt tthhee ffoolllloowwiinngg mmeetthhooddss aanndd pprrooppeerrttiieess:: AAdddd((kkeeyy,, vvaalluuee)),, Fiinndd((kkeeyy))vvaalluuee,, RReemmoovvee(( kkeeyy)),, CCoouunntt,, CClleeaarr(()),, tthhiiss[[]],, KKeeyyss.. TTrryy ttoo mmaakkee tthhee hhaasshh ttaabbllee ttoo ssuuppppoorrtt iitteerraattiinngg oovveerr iittss eelleemmeennttss wwiitthh ffoorreeaacchh.. 55.. IImmpplleemmeenntt tthhee ddaattaa ssttrruuccttuurree ""sseett"" iinn aa ccllaassss HHaasshheeddSSeett<<TT>> uussiinngg yyoouurr ccllaassss HHaasshhTTaabbllee<<TT,,TT>> ttoo hhoolldd tthhee eelleemmeennttss.. IImmpplleemmeenntt aallll ssttaannddaarrdd sseett ooppeerraattiioonnss lliikkee AAdddd((TT)),, Fiinndd((TT)),, RReemmoovvee((TT)),, CCoouunntt,, CClleeaarr(()),, uunniioonn aanndd iinntteerrsseecctt..