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.