You are on page 1of 35

Tm hiu Collections:

Algorithms, Custom Implementations


and Interoperability
Sinh vin thc hin:
Trn Bo Lc 20102696
Phm Vit Anh 20101112
Ging vin hng dn: TS. Nguyn Hng Quang
Ni dung trnh by
Khi qut v Collection
Cc thut ton vi Collection
Thit k Collection theo nh ngha ca ngi dng
Kh nng tng tc gia cc Collection

2
Khi qut v Collection trong Java (1)
Mt Collection n gin l mt i tng nhm nhiu phn t bt ngun t cc phn t
n.
ngha: c s dng lu tr, tr li, thao tc v giao tip vi tp hp d liu.
Java C cc dng Collection c bn sau:
List
Map
Set
3
Khi qut v Collection trong Java (2)
Framwork Collection: kin trc thng nht miu t v thao tc vi Collection, gm:
Interfaces: cho php Collection thao tc c lp vi cc implementation c miu t.
Implementation: th hin c th ca cc giao din Collections.
Algorithms: cc phng php thc hin tnh ton hu ch nh: tm kim, sp xp cc phn t
trong Collection.
Li ch ca Framework:
Gim thiu kh khan khi lp trnh
Tng tc v cht lng chng trnh
Cho php tng tc gia cc API khng lin quan
Tit kim cng sc hc v s dng cc API mi.
Tit kim cng sc thit k cc API mi
Thc y vic ti s dng phn mm

4
Cc thut ton vi Collection
Framework Collection ca Java h tr mt s thut ton vi Collection, bao gm:
Sp xp
Xo trn (Shuffling)
Th tc thao tc d liu (Routine Data Manipulation)
Tm kim
T hp (Composition)
Tm cc tr
5
Cc thut ton vi Collection Sp xp (1)
Thut ton thao tc vi Collection dng List.
Mc ch: Sp xp cc phn t trong List tng dn theo mt quan h th t no .
c thc hin bng cch gi phng thc: Collections.sort()
C 2 dng:
Dng c bn:
Dng ty bin

6
Cc thut ton vi Collection Sp xp (2)
Dng c bn:
List c sp xp theo th t t nhin ca cc phn t trong List.
Phn t l cc i tng String: sp xp theo bng ch ci alphabe
Phn t l cc i tng Date: sp xp theo th t thi gian,.
Cch thc thc hin:
Truyn tham s l 1 i tng List vo li gi phng thc sort
K thut: s dng sp xp trn v l do nhanh v n nh
Nhanh: c m bo chy trong thi gian nlogn (tng ng vi quicksort)
n nh: v khng thc hin sp xp vi cc phn t ngang nhau (equal elements)
c bit hu ch khi thc hin sp xp cc i tng nhiu ln theo cc tiu ch khc nhau.




7
Cc thut ton vi Collection Sp xp (3)
Dng ty bin:
List c sp xp theo th t do ngi dng t nh ngha.
nh ngha tiu ch sp xp: khai bo i tng Comparator
Cch thc thc hin thut ton: Truyn vo li gi phng thc sort 2 tham s
Tham s th nht: i tng List
Tham s th hai: i tng Comparator



8
Cc thut ton vi Collection Xo trn (1)
Thao tc vi Collection dng List
Mc ch: Ph hy mi du vt v th t trong mt i tng List.
Tri ngc vi Sp xp.
Cch thc thc hin: gi phng thc Collection.shuffle()
K thut: Sp xp li List da trn mt ngun ngu nhin sao cho tt c cc hon v ca
List c xc sut xy ra nh nhau.
ng dng:
Ph hp tnh cht may mn ca nhiu vn .
V d: tro b bi, x s,
To cc test case.



9
Cc thut ton vi Collection Xo trn (2)
C 2 dng:
Dng 1: S dng ngun ngu nhin mc nh
Tham s u vo: i tng List
Dng 2: S dng ngun ngu nhin theo nh ngha ca ngi dng
Ngun ngu nhin: i tng Random cho ngi dng khai bo
Tham s u vo cho phng thc shuffle: mt i tng List, mt i tng Random


10
Cc thut ton vi Collection Th tc thao
tc d liu (1)
Framework Collection Java cung cp 5 th tc thao tc d liu c bn thng qua cc
phng thc:
reverse
fill
copy
swap
addAll
Cc phng thc ny u thc hin trn Collection dng List.
Ring addAll thc hin vi mi Collection

11
Cc thut ton vi Collection Th tc thao
tc d liu (2)
C php ngha
Collections.reverse(List L) o ngc th t ca cc phn t trong L
Collections.fill(List L, Obj T) Ghi ln tt c cc phn t ca L gi tr T
Collections.copy(List dest, List src) Sao chp cc phn t ca src sang dest.
Kch thc ca dest phi ln hn hoc bng
ca src. Nu di hn, cc phn t cn li ca
dest s khng b nh hng
Collections.swap(List L, int i, int j) Hon i phn t th i v j trong L cho nhau
Collections.addAll(Collection c, T...elements) Thm tt c cc elements vo collection c
12
Cc thut ton vi Collection Tm kim (1)
Framework Collection Java cung cp phng thc tm kim theo thut ton tm kim nh
phn.
Phng thc ny thc hin vi Collection dng List
Mc ch: tm kim mt phn t xc nh trong mt i tng sp xp.
i tng List phi c sp xp trc khi thc hin tm kim
C 2 dng:
Dng 1: tham s gm mt i tng List v mt phn t tm kim, gi l search key
Dng ny gi nh List c sp xp theo th t t nhin ca phn t
Dng 2: ngoi tham s nh Dng 1, c them tham s l tiu ch sp xp Comparator.
Dng ny gi nh List c sp xp tng dn theo Comparator

13
Cc thut ton vi Collection Tm kim (2)
C 2 dng u nh ngha kt qu tr v nh sau:
Nu List cha search key: tr v ch s ca n trong List.
Nu c nhiu phn t bng search key: tr v mt trong cc ch s ca n trong List.
Nu List khng cha search key, gi tr tr v l:
- (insertion point - 1)
Trong , insertion point l v tr ti gi tr s c chn vo List v bng:
Ch s ca phn t u tin ln hn search key
Hoc l List.size() nu tt c cc phn t ca List u nh hn search key
Gi tr tr v ln hn hoc bng 0 khi v ch khi search key c tm thy.
14
Cc thut ton vi Collection T hp
Framework Collection Java cung cp 2 phng thc cho php thc hin cc thao tc t hp
frequency
disjoint
C 2 phng thc ny u c th thc hin vi mi Collection.

C php ngha
Collections.frequency(Collec
tion c, Object o)
m s ln i tng o xut hin trong c
Collections.disjoint(Collect
ion c1, Collection c2)
Kim tra xem c1 v c2 c phn t chung
hay khng?
Nu c tr v true.
15
Cc thut ton vi Collection Tm cc tr
Collections cung cp 2 phng thc min v max cho php tim phn t nh nht v ln nht
trong mt Collection.
C th thc hin vi mi Collection
Mi phng thc ny lic 2 dng:
Dng 1: Mt i tng Collection l tham s duy nht.
tr v phn t nh nht (hoc ln nht) theo th t t nhin ca phn t.
Dng 2: C thm tham s Comparator
tr v phn t nh nht (hoc ln nht) theo th t m Comparator xc nh

16
Thit k Collection theo nh ngha ngi dng (1)
Ngoi cc implementation ca giao din Collection m Java cung cp, ngi dng c
th t thit k cc implementation ca ring mnh.
L do ngi dng t implement giao din Collection:
Tnh lin tc:
ng dng c th
Hiu nng cao, mc ch c bit
Hiu nng cao, mc ch khi qut
Chc nng nng cao
S thun li
Adapter: Gi s bn c mt API c s dng Collection c bit do bn t nh ngha, khi bn
cn phi vit mt Adapter cho php nhng Collection ny thc hin c trong Framework
Collection..


17
Thit k Collection theo nh ngha ngi dng (3)
Cch vit mt Implementation:
Bc 1: chn mt lp tru tng m bn mun implementation.
Bc 2: Vit code thc thi cho tt c cc phng thc tru tng ca lp .
Nu bn thay i i tng Collection, bn phi ghi mt hoc mt s phng thc c
th (c lit k trong ti liu API ca lp tru tng ny)
Bc 3: Kim tra v debug code thc thi nu cn thit.
Bc 4: c ti liu API ca lp tru tng ny, nu thy phng thc no chm bn c th ghi
nng cao hiu nng.
Thng thng bc ny hay c b qua nht.
18
Thit k Collection theo nh ngha ngi dng (4)
Danh sch tng hp cc lp tru tng c th c implementation:
AbstractCollection: Collection c th hoc l mt Set hoc l mt List. t nht, phi cung cp mt
phng thc iterator v phng thc size
AbstractSet : mt set, s dng tng t AbstractCollection
AbstractList: mt List, t nht phi cung cp phng thc get v size. C th c; set, remove, add
AbstractSequentialList: mt List, t nht phi c phng thc listIterator v size.
AbstractQueu: t nht phi c phng thc offer, peek, poll, size, mt iterator h tr remove
AbstractMap: mt Map, t nht phi c entrySet.
Thng c implementation cng vi lp Abstract. Nu thay i Map, phi cung cp phng
thc put.
19
Thit k Collection theo nh ngha ngi dng (5)
V d: Implementation ca Array.asList

20
public static <T> List<T> asList(T[] a) {
return new MyArrayList<T>(a);
}

private static class MyArrayList<T> extends
AbstractList<T> {

private final T[] a;

MyArrayList(T[] array) {
a = array;
}

public T get(int index) {
return a[index];
}

}

public T set(int index, T element) {
T oldValue = a[index];
a[index] = element;
return oldValue;
}

public int size() {
return a.length;
}
}
Thit k Collection theo nh ngha ngi dng (6)
V d: Implementation ca Array.asList:
Trong v d ny, bn ch cn cung cp
mt constructor
Cc phng thc: get, set, size
Cc cng vic cn li s do AbstractList thc hin.
Bn c th gi:
ListIterator,
ly kch thc,
phng thc tm kim,
tnh ton m bm,
so snh bin chui
21
Kh nng tng tc gia cc Collections (1)
Framework Collection Java ra i sau khi nn tng, cng ngh Java pht trin n mt
mc nht nh.
S xut hin mi ca Framework ny ni chung v ca Collections ni ring cn phi
tng tc c vi cc thnh phn c trong nn tng Java v ngc li.
lm c iu ny cn phi hon thin c ng thi 2 c im sau:
Tnh tng thch: lm th no cc Collection c th lm vic c vi cc API c xut hin
trc .
Thit k API: thit k ra sao cc API mi c th tng tc mt m vi cc API c xut
hin trc .

22
Kh nng tng tc gia cc Collections (2)
Tnh tng thch:
m bo kh nng tng tc hon ton gia cc giao din Collection c bn.
m bo kh nng tng thch hon ton gia cc kiu d liu c s dng biu din cc
Collection trong cc phin bn trc ca Java nh: Vector, Hashtable, array v Enumeration.
Nh c tnh tng thch m ta c th thc hin c vic chuyn i t cc Collection c
sang cc Collection trong Framework Collection v ngc li.
Vic chuyn t Collection c Collection mi: gi l tng thch upward
Vic chuyn t Collection mi Collection c: gi l tng thch backward


23
Kh nng tng tc gia cc Collections (3)
Tng thch upward:






hai API ny phi hp trn chu: phi chuyn cc Collection c sang Collection mi
Vic ny c thc hin d dng nh s h tr ca Framework Collection.


24
API
API
(Yu cu
Collection mi)
Collection c
?
Kh nng tng tc gia cc Collections (4)
Tng thch upward:
Nu API c tr v mt mng cc i tng, Framework Collection s xem mng ny nh mt
List.
S dng: Arrays.asList truyn mt mng vo mt phng thc bt k yu cu mt Collection
hay mt List.
Foo[] result = oldMethod(arg);
newMethod(Arrays.asList(result));
Nu API c tr v mt Vector hay mt Hashtable, th Vector s t ng thc thi giao din List,
Hashtable thc thi giao Map
Truyn trc tip vo bt k phng thc no yu cu Collection hay List (hoc Map)
Vector r1 = oldMethod(arg); Hashtable r2 = oldMethod(arg);
newMethod(result1); newMethod(result2);


25
Kh nng tng tc gia cc Collections (5)
Tng thch upward:
Nu API tr v mt Enumeration, phng thc Collection.list s chuyn i n sang mt
Collection.
Trng hp ny t ph bin
Enumeration e = oldMethod(arg);
newMethod(Collections.list(e));


26
Kh nng tng tc gia cc Collections (6)
Tng thch backward:






hai API ny phi hp trn chu: phi chuyn cc Collection mi sang Collection c
Vic ny cng c thc hin d dng nh s h tr ca Framework Collection.


27
API
API
(Yu cu
Collection c)
Collection mi
?
Kh nng tng tc gia cc Collections (7)
Tng thch backward:
Trng hp: API mi tr v mt Collection v API c yu cu mt mng cc Object
S dng phng thc toArray:
Collection c = newMethod();
oldMethod(c.toArray());
Trng hp: API mi tr v mt Collection v API c yu cu mt mng cc String (hay mt
kiu d liu khc)
S dng mt dng khc ca toArray nhn tham s u vo l mt mng
Collection c = newMethod();
oldMethod((String[]) c.toArray(new String[0]));



28
Kh nng tng tc gia cc Collections (8)
Tng thch backward:
Trng hp: API mi tr v mt Collection v API c yu cu mt Vector
Constructor ca Vector s thc hin vic ny
Collection c = newMethod();
oldMethod(new Vector(c));
Trng hp: API mi tr v mt Collection v API c yu cu mt Hashtable
Tng t vi Vector:
Map m = newMethod();
oldMethod(new Hashtable(m));



29
Kh nng tng tc gia cc Collections (9)
Tng thch backward:
Trng hp: API mi tr v mt Collection v API c yu cu mt Enumeration
Trng hp ny khng ph bin
S dng phng thc Collection.enumeration: phng thc ny nhn tham s l mt Collection
v tr v mt Enumeration trn cc phn t ca Collection.
Collection c = newMethod();
oldMethod(Collections.enumeration(c));



30
Kh nng tng tc gia cc Collections (10)
Thit k API:
thit k API ca mnh phi hp nhp nhng vi cc API khc, ngi dng cn nm
vng cc quy tc v:
Tham s u vo
Gi tr tr v
Cc API c.
y c xem l nhng quy tc chun mc tr thnh mt cng dn tt trong th gii
Collections.


31
Kh nng tng tc gia cc Collections (11)
Thit k API - Tham s u vo:
Nu tham s u vo yu cu l mt Collection, cn phi khai bo kiu ca tham s l mt trong
cc kiu giao din Collection thch hp
Khng s dng kiu implementation v s ph hy mc ch ca Framework Collection l da
trn giao din.
Nn s dng kiu d liu t c th nht:
Khng nn yu cu tham s l List hay Set nu Collection c th thay th
Cc kiu d liu tt nht v ph bin cho tham s u vo l: Collection v Map
Khng bao gi nh ngha mt Collection c bit ca ring ngi dng v yu cu tham s u
vo l cc i tng ca lp ny v s lm mt i tt c cc li ch m Framework Collection ca
Java cung cp

32
Kh nng tng tc gia cc Collections (12)
Thit k API Gi tr tr v:
Gi tr tr v linh hot hn so vi tham s u vo.
C th l gi i tng ca bt k kiu d liu no hoc l extend mt trong cc giao din
collection.
Ngc vi tnh cht ca tham s u vo ch: Nn tr v giao din collection c ng dng c
th nht hn l mt giao din chung chung.
V d:
Nn tr v SortedMap hn l Map nu cn thit bi v d SortedMao mt nhiu thi gian
xy dng hn cc thc th Map thng thng nhng li c nhiu tnh nng mnh m hn.

33
Kh nng tng tc gia cc Collections (13)
Thit k API Cc API c:
Hy ci tin cc kiu Collection c thnh cc giao din Collection c bn.
Nu khng th, hy nh ngha mt lp adapter bao mt trong cc i tng collection c cho
php thc hin chc nng nh mt Collection c bn.
Hy ci tin API ca bn vi nhng li gi mi cho php u vo l cc i tng ca mt
Collection c bn.
Nhng li gi mi ny c th cng tn ti vi cc li gi nhn cc Collection c lm tham s.
Nu khng th, hy cung cp mt constructor cho kiu d liu c c th nhn mt i tng
Collection c bn v tr v mt collection c cha cc phn t tng t (hoc nh x)
C hai cch tip cn ny u cho php ngi dng truyn cc Collection ty vo API ca
h.

34
35
Thank you for listening!

You might also like