Ề SEMINAR KĨ THU T PH N M M SEMINAR KĨ THU T PH N M M Ề
Ậ Ậ
Ầ Ầ
M T S V N Đ C B N V JAVA
Ộ Ố Ấ
Ề Ơ Ả
Ề
Nhóm 07 :
ng
ồ
ễ
ươ
ạ
Nguy n H ng Ph Ph m Thiên Phúc Nguy n Giáp Nguyên Sinh
ễ
N i dung trình bày ộ
ạ ộ ủ ệ
1. Nguyên t c ho t đ ng c a Java. Khái ni m ắ Java platform:
ng phát tri n (JDK, Eclipse). + Java SE: JRE + Java ME: MIDP ườ ụ ể
2. Công c môi tr 3. Cú pháp Java (package, tên file, tên l p, cách th a ừ ớ
ự ệ
4. Các lo i Interfaces và l p m ng Java k l p và th c thi giao di n) ế ớ ả ạ ớ
1-1. NGUYÊN T C HO T Đ NG Ắ Ộ Ạ
t b ng ngôn ng l p ế ằ
ng trình vi ị ả
ị
• M t ch ữ ậ trình Java ộ ươ c biên d ch ra mã c a máy o java (mã java s đ ủ ẽ ượ bytecode). Sau đó máy o Java ch u trách nhi m ả chuy n mã java bytecode thành mã máy t ệ ng ng. ươ ứ ể
ộ ữ ậ ừ ừ
ng trình ngu n vi ươ ế ồ
ữ ậ ầ
• Java là m t ngôn ng l p trình v a biên d ch v a ị t b ng ngôn c biên c ẽ ượ
máy. thông d ch. Ch ằ ị ng l p trình Java có đuôi *.java đ u tiên đ ượ d ch thành t p tin có đuôi *.class và sau đó s đ ị trình thông d ch thông d ch thành mã ị ậ ị
1-2. JAVA SE, JRE
ệ ề ụ ứ ứ
• Java SE (Java Platform, Standard Edition): là công ngh n n h tr xây d ng các ng d ng có ch c ự ỗ ợ năng cao, t c đ và đáng tin c y ậ ố ộ
ả
• JRE (Java Runtime environment): bao g m máy o t. Là môi ư ệ ế ậ ầ
ồ Java, các th vi n và các t p tin c n thi ng đ th c thi m t ng d ng Java. tr ể ự ộ ứ ườ ụ
1-3. JAVA ME, MIDP
• Java ME (Java Platform, Micro Edition): platform đ ể
t b di đ ng. phát tri n các ng d ng trên thi ứ ụ ể ế ị ộ
• MIDP (Mobile Information Device Profile): là môi t b di ng đ th c thi ng d ng Java trên thi ể ự ế ị ụ ứ
tr ườ đ ng.ộ
NG PHÁT TRI N JAVA
2. CÔNG C Và MÔI TR Ụ
Ể ƯỜ 2-1. JDK – Java Development Kit
- B công c phát tri n java đ ộ ể ụ ượ ở
ụ ầ
ề
ấ ệ ng trình java. i và th c thi các ch ầ ươ ỗ
- JDK g m 2 công c quan tr ng c cung c p b i sun ấ microsystems. M c đích c a jdk là cung c p ph n ủ c yêu c u cho vi c biên m m và các công c đ ụ ượ d ch, ki m tra l ự ể ị ồ ọ
• Javac (biên d ch) • Java (thông d ch) ụ ị ị
2-1. JDK – JAVA DEVELOPMENT KIT
- Javac : đ c s d ng đ biên d ch mã ngu n c a ượ ử ụ ủ ể ồ ị
java sang d ng bytecode. ạ
- Cú pháp : javac [option] source Source là t p tin .java ậ
- Java : đ ượ ử ụ ạ
ể ủ ấ ố
c s d ng đ thông d ch và ch y các Java ị bytecode. Nó l y tên c a m t t p tin class làm đ i ộ ậ s đ th c thi ố ể ự
- Cú pháp : java [option] classname [arguments]
2-1. JDK – COMPILE VÀ RUN
B c 1: Download JDK ướ
B c 2: Cài đ t JDK ướ ặ
2-1. JDK – COMPILE VÀ RUN
ọ
B c 3: C u hình máy ấ ướ (Win 7) - Click ph i vào Computer ả - Properties - Advanced system settings - Ch n th Advanced ẻ - Environment Variables…
2-1. JDK – COMPILE VÀ RUN
ế
ế
ồ ạ ấ ọ
thêm
i variable PATH: ch n PATH và nh n Edit > ;C:\Program vào value ng d n đ n th m c ư ế ườ ụ ẫ
ấ
i variable PATH: nh n New > thêm value C:\Program và
B c 3: (ti p) ướ ph n user variables n u: Ở ầ + T n t i t ạ Files\Java\jdk1.6.0_24\bin (đ bin n i cài JDK) ơ + Ch a t n t ạ ư ồ PATH name variable Files\Java\jdk1.6.0_24\bin
2-1. JDK – COMPILE VÀ RUN
i C:\ ạ
B c 4: M Notepad và t o file HelloWorld.java t ạ ở ướ v i n i dung: ớ ộ
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
2-1. JDK – COMPILE VÀ RUN
5: Biên d ch HelloWorld.java thành ị
ệ
B c ướ HelloWorld.class (dùng l nh javac) Start > Run > cmd > cd\ > javac HelloWorld.java
2-1. JDK – COMPILE VÀ RUN
ướ ệ ạ
B c 6: Ch y (dùng l nh java) java HelloWorld > xem k t quế ả
2-2. ECLIPSE – COMPILE VÀ RUN
ầ ề
c các nhà phát ễ tri n s d ng đ xây d ng nh ng ng d ng J2EE. ể ử ụ ụ ự
• Eclipse là ph n m m mi n phí, đ ượ ữ ứ ể • Eclipse SDK bao g m 3 ph n chính: ầ ồ
– Platform – Java Development Toolkit (JDT) – Plug-in Development Environment (PDE).
2-2. ECLIPSE – COMPILE VÀ RUN
B c 1: Download Eclipse ướ
2-2. ECLIPSE – COMPILE VÀ RUN
i nén t p tin v a t ậ
ướ ướ ạ
i B c 2: Gi ừ ả ả B c 3: T o project Hello World ạ - Ch y eclipse.exe - File > New > Java Project
- Tai Project name đi n “Hello World” ề
2-2. ECLIPSE – COMPILE VÀ RUN
ướ
B c 4: Thêm class HelloWorld - Click ph i vào Project Hello World > New > Class ả
2-2. ECLIPSE – COMPILE VÀ RUN
ế
ướ ặ
B c 4: (ti p) - Đ t tên class là HelloWorld - Check vào public static void main (String[] args) - Click Finish
2-2. ECLIPSE – COMPILE VÀ RUN
ướ
B c 5: Thêm vào hàm main đo n code ạ System.out.println("Hello World"); B c 6: Run và xem k t qu ướ ế ả
2-3. NH N XÉT Ậ
– T o m t file text ộ – Dùng javac đ biên d ch file text thành file .class ị ể – Dùng java đ th c thi file .class ể ự
- JDK: ạ
i h n khi s d ng giao ậ ợ ơ ử ụ
- Eclipse: m i thao tác thu n l ọ ng tác di n đ t ể ươ ệ
3. CÚ PHÁP NNLT JAVA 3-1. Package
ệ ớ ạ ạ i t o thành m t th vi n ộ ư ệ
- Vi c đóng gói các l p l dùng chung g i là package. ọ
ộ ề ớ
- M t package có th ch a m t hay nhi u l p bên trong, đ ng th i cũng có th ch a m t package khác bên trong. ồ ể ứ ể ứ ộ ộ ờ
3-1. PACKAGE
ộ ớ ấ ộ
-Đ khai báo m t l p thu c m t gói nào đ y ta ph i ả ộ ể dùng t khóa package. ừ
ả ầ ậ
-Dòng khai báo gói ph i là dòng đ u tiên trong t p tin khai báo l p. ớ
ả ộ
c l u trong cùng m t th m c. - Các t p tin khai báo l p trong cùng m t gói ph i ậ đ ượ ư ư ụ ớ ộ
3-1. PACKAGE
Ví d :ụ
package phuongtiengiaothong; class xemay { // …. }
ng trình ta ớ xemay vào ch ươ
Khi đó mu n s d ng l p s khai báo nh sau: ẽ ố ử ụ ư
import phuongtiengiaothong.xemay;
3-2. TÊN FILE, TÊN L PỚ
(Unicode), ký s ỗ ự ố
ữ ằ ấ ạ ộ ướ ‘_’ i
khóa
ừ gi a ở ữ ả
- Tên l pớ : + Bao g m m t chu i các ký t ộ ồ (Unicode), ký s . ố + Ph i b t đ u b ng m t ch cái, d u g ch d ả ắ ầ hay d u dollar '$' ấ + Không đ c trùng v i các t ượ ớ + Không có kho ng tr ng ắ - Tên file: file .java ph i có tên trùng v i tên l p ớ ả ớ
3-3. K TH A Ế Ừ
ộ ớ ữ
• M t l p con (subclass) có th k th a t t c nh ng ể ế ừ ấ ả ng th c c a m t l p khác (siêu ộ ớ ứ ủ ươ
vùng d li u và ph ữ ệ l p - superclass). ớ
m t l p đã bi ư ậ ộ ớ ớ ừ ộ ớ • Nh v y vi c t o m t l p m i t ệ ạ ế
ủ ớ
ủ ấ ớ ớ
ấ ừ ộ ớ
m t l p nào đ ớ ộ ớ
t sao cho các thành ph nầ (fields và methods) c a l p cũ cũng s thành các thành ph n (fields và methods) c a ầ ẽ l p m i. Khi đó ta g i l p m i là l p d n xu t ẫ ọ ớ ớ ớ (derived class) t l p cũ (superclass). Có th l p cũ ể ớ ừ ớ ó, nh ng ư cũng là l p đ c d n xu t t ẫ ượ ớ đ i v i l p m i v a t o thì l p cũ đó là m t l p siêu ớ ừ ạ ố ớ ớ l p tr c ti p (immediate supperclass). ớ ự ế
3-3. K TH A Ế Ừ
Dùng t extends đ ch l p d n xu t. khóa ể ỉ ớ ẫ ấ
ừ class A extends B { // … }
3-4. Interface là gì?
• Theo ph
ươ
ấ
ế
ng pháp phân c p th a k , có th ể t code ư ng ừ
ừ ế t vi ế ớ
ừ ượ l p tr u
• Ta mu n m t l p đ
ộ ớ ượ
nhi u l p ề ớ ng mà không b kh ng ch b i tính ế ở
c th a k t ừ ế ừ ố ị
i pháp: Interface
l p cha có nh ng hành vi ch a bi ữ ớ ề hành vi tr u t th nào ng. t ượ ố tr u t ừ ượ đ n th a k . ừ ế ơ • Gi ả
Slide 27/47
•
ộ
ố
ể
ặ ớ
•
ộ ớ
ừ
ng”
•
c m t nhóm các x lý c n
ướ
ử
ầ
ộ
•
ộ ặ
ủ
ữ
ể
ớ
ng.
ộ ớ hoàn toàn tr u t
ượ
• •
c xem nh là m t l p ộ
ư ụ ể ệ
ừ ượ ừ ế
ự ạ
Interface... Interface là m t khai báo bao g m m t t p đ c đi m g m các ộ ậ ồ h ng, các hành vi mà không mu n khai báo l p. ố ằ Interface mang ý nghĩa “nh là m t l p hoàn toàn tr u ư t ượ Interface mang ý nghĩa khai báo tr có. Interface là m t đ c đi m c a các ngôn ng OOP m i nh ư Java, C#. Interface đ Interface là m t công c đ hi n th c d ng đa th a k trong Java, C#.
Slide 28/47
Khai báo interface
ị
ằ
ể ọ ơ ề
ọ
• Khai báo interface b ng 1 file.java, biên d ch thành file.class.
• Cú pháp
[modifier] interface InterfaceName
{ [ modifier]
c. ượ ư ụ
c p.ậ
• Modifier trong interface NÊN là public đ d dùng.
ể ễ
Slide 29/47
Thí d :ụ
ậ
ẽ ề ầ
ằ
ệ
ng
Nh n xét: Các hình v đ u c n -h ng PI -tác v tính di n tích, ụ -tính chu vi -mà ta không mu n t o ố ạ l p tr u t ừ ượ ớ T o 1 interface. ạ
Slide 30/47
Thí d : interface v nh p xu t d li u ấ ữ ệ ề
ụ
ậ
• Ta nghĩ r ng, m i l p trong ph n m m ta đang xây d ng đ u c n nh p
ề ầ
ự
ề
ầ
ằ
ậ
xu t d li u.
ấ ữ ệ T o m t interface cho vi c này.
ệ
ộ
ỗ ớ ạ
Slide 31/47
Hi n th c interface trong m t l p ộ ớ
ự
ệ
ủ
• M t l p có th hi n th c nhi u interface (có
• M t l p có code c th hóa các hành vi c a ụ ể m t interface thì g i là ọ ể ệ
implementation. ự
ề
d ng đa th a k ).
ộ ớ ộ ộ ớ ạ
• Cú pháp xây d ng m t l p có hi n th c
ộ ớ
ự
ệ
ừ ế ự
interface:
Slide 32/47
Cú pháp xây d ng l p có hi n th c interface
ự
ự
ệ
ớ
implements Interface1, interface2,...
ớ
[modifier] class Tên extends L pCha {
ự ủ
ệ
ự
ủ
ệ
ự
ủ
ệ
Th tứ ự không quan tr ngọ
ự
ủ
ệ
}
Slide 33/47
Thí dụ
interface ủ
ộ
ả
ị
Khai báo method trong interface friendly ho c public. ph i là ả ặ Suy nghĩ v đ c đi m: ề ặ ể là quy đ nh v các kh năng c a m t ề l p.ớ
ộ
ự
ệ
M t l p c th có ộ ớ ụ ể khai báo inplements m t interface mà quên ch a hi n th c ư hành vi c a ủ interface Error
Slide 34/47
Thí d :ụ
ừ ượ
L p tr u t ng có th ớ ể ch a c th các method ư ụ ể c a interface ủ
Modifier c a hành vi ủ c th c a các method ụ ể ủ trong interface ph i là ả public
Slide 35/47
Thí d : Bi n interface ế
ụ
Khai báo bi n thông ế qua interface
c dùng
ế
ỉ ượ
Bi n interface ch đ v i các hành vi có trong interface ớ
Slide 36/47
Thí d : 2 interface c th ụ ể ụ
interface cho vi c tính toán các hình v
ệ
ẽ
interface cho vi c nh p xu t đ i t
ng
ấ ố ượ
ệ
ậ
Slide 37/47
Thí d : S d ng 2 interface
ụ ử ụ
Slide 38/47
Interface th a kừ ế
i các khai báo hành vi.
ể ừ ế ộ ạ
• Interface có th th a k interface cha • Interface con là h i l • Cú pháp: interface InterfaceSon extends InterfaceFather { < các khai báo thêm> } • N u m t l p implements interface con thì ph i c ả ụ
Slide 39/47
th hóa c các method có trong interface cha. ế ể ộ ớ ả
Thí dụ
Slide 40/47
Collections Framework
• Collections Framework bao g m nhi u l p và
ề ớ
ồ giao di n trong khung c ng tác.
ệ
ộ
ộ
ự
ủ ự
• Khung c ng tác c a các Collection Java d a trên tri n khai th c hi n c th m t s giao di n đ nh nghĩa các ki u s u t p (collection)
ệ ụ ể ộ ố ể ư ậ
ể ị
ệ
41
• Collection là đ i t
ng có kh năng ch a các
Collection ố ượ
ứ
ả
ng khác.
đ i t ố ượ
ng trên collection
ườ
• Các thao tác thông th – Thêm/Xoá đ i t ố ượ – Ki m tra m t đ i t ộ ố ượ
ng có ng vào/kh i collection ỏ trong collection ở
ng t ể không ấ ộ ố ượ ừ
collection ng trong collection ố ượ
42
– L y m t đ i t – Duy t các đ i t ệ – Xoá toàn b collection ộ
Collections Framework
• Các collection đ u tiên c a Java: ầ
ủ
ộ ả
ừ
ả
Java 1.2) ễ
– Là m t ki n trúc h p nh t đ bi u di n và thao ấ ể ể ộ ợ
– M ngả – Vector: M ng đ ng – Hastable: B ng băm • Collections Framework (t ế tác trên các collection.
– Giúp cho vi c x lý các collection đ c l p v i ớ ộ ậ
43
t bên trong c a chúng. bi u di n chi ti ễ ể ủ ệ ử ế
Collections Framework
• M t s l
ươ
i ích c a Collections Framework ủ ộ ố ợ – Gi m th i gian l p trình ậ ờ ả – Tăng c ng hi u năng ch ng trình ệ ườ – D m r ng các collection m i ễ ở ộ ớ – Khuy n khích vi c s d ng l ạ ế
44
i mã ch ng trình ệ ử ụ ươ
Collections Framework
• Collections Framework bao g mồ
– Interfaces: Là các giao ti p th hi n tính ch t ấ ể ệ ế
ể ư List, Set,
c a các ki u collection khác nhau nh ủ Map.
– Implementations: Là các l p collection có s n ẵ ớ
c cài đ t các collection interfaces. đ ượ
ặ – Algorithms: Là các ph ng th c tĩnh đ x lý ươ ứ
ế
45
ể ử trên collection, ví d : s p x p danh sách, tìm ụ ắ ph n t l n nh t... ầ ử ớ ấ
Interfaces
<
<
<
<
<
<
46
Giao ti p Collection
ế
• Cung c p các thao tác chính trên collection nh ư
ấ
ầ ử
• N u l p cài đ t Collection không mu n h tr các thao
thêm/xoá/tìm ph n t ... Ví d : ụ – boolean add(Object element); – boolean remove(Object element); – boolean contains(Object element); – int size(); – boolean isEmpty(); ế ớ
ỗ ợ
ố
ặ ổ
tác làm thay đ i collection nh add, remove, clear... nó có ư th tung ra ngo i l
UnsupportedOperationException.
ạ ệ
ể
47
Giao ti p Set ế
• Set k th a t
Collection, h tr các thao tác x lý trên
ế ừ ừ
ỗ ợ
ử
collection ki u t p h p ợ
ể ậ
ng th c riêng ngoài các ph
ng
ứ
ươ
th c k th a t
ươ Collection.
• Set không có thêm ph ứ ế ừ ừ
Giao Ti p ế Set đ nh nghĩa b Collection không có ph n t
ầ ử
ộ
ị
trùng l pắ
48
Giao ti p SortedSet
ế
ợ
ế ừ ừ có th so sánh đ
• SortedSet k th a t ể ầ ử
Set, nó h tr thao tác trên t p h p ậ ng đ a vào ư
ả
ố ượ ế ộ
ỗ ợ c. Các đ i t ượ ặ ả
ặ ớ
ậ
các ph n t trong m t ộ SortedSet ph i cài đ t giao ti p Comparable ặ SortedSet ph i nh n m t Comparator ho c l p cài đ t trên ki u c a đ i t
ng đó.
ể ủ ố ượ
• M t s ph
ộ ố ươ
ứ ủ SortedSet:
đ u tiên (nh nh t) cu i cùng (l n nh t)
ầ ử ầ ầ ử ố
ấ ấ
ỏ ấ ấ ớ ộ ậ
ấ
ầ
n m trong kho ng t
e1 t
i e2.
t
ng th c c a – Object first(); // l y ph n t – Object last(); // l y ph n t – SortedSet subSet(Object e1, Object e2); // l y m t t p các ph n ớ
ử ằ
ừ
ả
49
Giao ti p List ế
Collection, nó cung c p thêm các ph
ng
ế ừ ừ
ấ
Object đ
ượ ế
c x p theo ch ỉ
ớ
• List k th a t ươ th c đ x lý collection ki u danh sách (Danh sách là ứ ể ử ể m t collection v i các ph n t ầ ử ộ s ).ố
• M t s ph
ộ ố ươ
ng th c c a List ứ ủ
– Object get(int index); – Object set(int index, Object o); – void add(int index, Object o); – Object remove(int index); – int indexOf(Object o); – int lastIndexOf(Object o);
50
Duy t collection
ệ
trong collection có th đ
• Các ph n t
ể ượ
c duy t thông ệ
• Các l p cài đ t Collection cung c p ph
ầ ử qua Iterator. ớ
ặ
ươ
ng th c tr v ả ề
ứ
iterator trên các ph n t
ấ c a chúng.
ầ ử ủ
Collection c;
...
Iterator it = c.iterator();
51
Duy t collection
ệ
m t collection.
ệ
ầ ự ộ
• Iterator cho phép duy t tu n t • Các ph ng th c c a Iterator:
ứ ủ
ươ
– boolean hasNext(); – Object next(); – void remove();
• Ví d :ụ
Iterator it = c.iterator(); while ( it.hasNext() ) { Point p = (Point) it.next(); System.out.println( p.toString() ); }
52
Giao ti p Map ế
ử
• Giao ti p ế Map cung c p các thao tác x lý trên ấ nh nghĩa collection có các c p ị
ạ
• M t s ph
các b ng ánh x . đ ả khóa - giá tr . ị ộ ố ươ
ng th c c a Map ứ ủ
– Object put(Object key, Object value); – Object get(Object key); – Object remove(Object key); – boolean containsKey(Object key); – boolean containsValue(Object value); – ...
53
ặ
Giao ti p Map ế
• Map cung c p 3 cách view d li u: ữ ệ ấ
Set keySet(); // Tr v các khoá
ả ề – View các giá tr : ị
Collection values(); // Tr v các giá tr ị
ả ề
– View các khoá:
ị
ị
• Sau khi nh n đ – View các c p khoá-giá tr ặ ặ ả ậ ượ ế
Set entrySet(); // Tr v các c p khoá-giá tr ả ề c k t qu là m t collection, ta có th dùng iterator đ duy t các ph n t ể
54
c a nó. ộ ầ ử ủ ệ ể
Giao ti p SortedMap
ế
ế
Map, nó cung c p thao c.
• Giao ti p SortedMap k th a t ả
ấ ế ừ ừ tác trên các b ng ánh x v i khoá có th so sánh đ ạ ớ
ượ
ể
ố
ư
• Gi ng nh SortedSet, các đ i t ố ượ ế ả
ặ ớ ố
ặ ả
ộ
ặ ng khoá.
ng khoá đ a vào trong ư SortedMap ph i cài đ t giao ti p Comparable ho c l p cài đ t SortedMap ph i nh n m t Comparator trên đ i ậ t ượ
55
Implementations
• Các cài đ t trong
ặ
l p collection có s n trong Java. ớ
Chúng cài đ t các
ặ
ệ
ả
ấ
Collections Framework chính là các ẵ collection interface trên đ th ể ể ở hi n các c u trúc d li u c th . Ví d : m ng đ ng, ữ ệ ụ ể ộ ụ danh sách liên k t, cây đ đen, b ng băm... ỏ
ế
ả
56
Implementations
LinkedList
List
ArrayList
HashSet
LinkedHashSet
Set
SortedSet
TreeSet
HashMap
Map
LinkedHashMap
SortedMap
TreeMap
57
Mô t
ả
các cài đ t ặ
• ArrayList: M ng đ ng, n u các ph n t
thêm vào v
t
ầ ử
ế
ượ
ộ
ẽ ự ộ
đ ng tăng kích c . ỡ
ả
• LinkedList: Danh sách liên k t 2 chi u. H tr thao tác
ả quá kích c m ng, m ng s t ỡ ả ế
ỗ ợ
ề
trên đ u và cu i danh sách. ố
ầ
ả
ằ
ớ
ế ợ .
các ph n t
• HashSet: B ng băm. • LinkedHashSet: B ng băm k t h p v i linked list nh m ả ầ ử
đ m b o th t ả
ả
• TreeSet: Cây đ đen (red-black tree).
ứ ự ỏ
58
Mô t
ả
các cài đ t ặ
ả
ặ ủ
ằ
đ m b o th t ả
ầ ử
ứ ự
ả
• HashMap: B ng băm (cài đ t c a Map). • LinkedHashMap: B ng băm k t h p v i linked list nh m ế ợ ớ ả (cài đ t c a Map). ặ ủ • TreeMap: Cây đ đen (cài đ t c a Map). ặ ủ
các ph n t ỏ
59
Ví d 1: TreeSet
ụ
// This program sorts a set of names import java.util.*;
public class TreeSetTest1 { public static void main(String[] args) { SortedSet names = new TreeSet(); names.add(new String("Minh Tuan")); names.add(new String("Hai Nam")); names.add(new String("Anh Ngoc")); names.add(new String("Trung Kien")); names.add(new String("Quynh Chi")); names.add(new String("Thu Hang")); System.out.println(names); } }
60
Ví d 2: Student Set
ụ
class Student implements Comparable { private String code; private double score;
public Student(String code, double score) { this.code = code; this.score = score; }
public double getScore() { return score; }
public String toString() { return "(" + code + "," + score + ")"; }
61
Ví d 2: Student Set
ụ
public boolean equals(Object other) { Student otherStu = (Student) other; return code.equals(otherStu.code); }
public int compareTo(Object other) { Student otherStu = (Student) other; return code.compareTo(otherStu.code); } }
62
Ví d 2: Student Set
ụ
// This programs sorts a set of students by name and then by score import java.util.*;
public class TreeSetTest2 { public static void main(String[] args) { SortedSet stu = new TreeSet(); stu.add(new Student("A05726", 8.5)); stu.add(new Student("A06338", 7.0)); stu.add(new Student("A05379", 7.5)); stu.add(new Student("A06178", 9.5));
System.out.println(stu);
SortedSet sortByScore = new TreeSet(new Comparator() // create an inner class
63
Ví d 2: Student Set
ụ
{ public int compare(Object a, Object b) { Student itemA = (Student) a; Student itemB = (Student) b; double scoreA = itemA.getScore(); double scoreB = itemB.getScore();
if ( scoreA < scoreB )
return -1; else return 1;
} }); // end of inner class
sortByScore.addAll(stu); System.out.println(sortByScore); } }
64
Ví d 3: HashMap
ụ
// This program stores a phone directory by hashing import java.util.*;
public class MyMapTest { public static void main(String[] args) { Map phoneDir = new HashMap(); phoneDir.put("5581814", new String("Dept. Informatics")); phoneDir.put("8584490", new String("Defense Staff")); phoneDir.put("8587346", new String("Administrative Staff")); phoneDir.put("7290028", new String("Student Club"));
// print all entries System.out.println(phoneDir);
// remove an entry phoneDir.remove("8584490");
65
Ví d 3: HashMap
ụ
// replace an entry phoneDir.put("7290028", new String("International Relation"));
// look up a value System.out.println(phoneDir.get("5581814"));
// iterate through all entries Set entries = phoneDir.entrySet(); Iterator iter = entries.iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println("key=" + key + ", value=" + value); } } }
66
Các l p bao ớ
• Collection ch làm vi c trên các Object. Nh ng ki u d ể ữ
ữ
ệ
ỉ
ư
ệ ơ ả
ự ế
ả
ớ
li u c b n nh : byte, short, int, long, double, float, char, c tr c ti p vào Collection mà boolean không th đ a đ ể ư ượ . ph i thông qua các l p bao • Các l p bao: Byte, Short, Int, Long, Double, Float, Char,
ớ
Boolean.
• Ví d :ụ
– Integer intObject = new Integer(9); – int value = intObject.intValue();
67
Algorithms
c cài đ t nh nh ng ph ng ượ ư ữ ươ
s • Các thu t toán đ ặ ậ th c tĩnh c a l p Collection ủ ớ
– static Object max(Collection c) – static Object min(Collection c) – static int binarySearch(List list, Object key) – static void sort(List list) – static void shuffle(List list) – các ph – các ph
ng th c t o synchronized collection ng th c t o read-only collection
ứ ạ ứ ạ
ươ ươ
68
• M t s ph ng th c c a Collections: ứ ộ ố ươ ứ ủ
Ví d : Tr n bài
ụ
ộ
import java.util.*;
public class MyShuffleTest { public static void main(String[] args) { List numbers = new ArrayList(52);
for (int i = 1; i <= 52; i++) numbers.add(new Integer(i));
System.out.println("Before shuffling:" + numbers + "\n");
Collections.shuffle(numbers); System.out.println("After shuffling:" + numbers + "\n"); } }
69
Collections Framework
c cài đ t b sung thêm các collection
– Là các l p cũ đ
ượ
ặ ổ
ớ interface.
ể
ằ
– Vector: Có th thay b ng ArrayList – Hastable: Có th thay b ng HashMap ể
ằ
• Legacy Implementations
– Là các l p tr u t
ng đã cài đ t các collection interface
ừ ượ
ớ
ặ
mà ta có th k th a đ t o ra các collection m i.
ể ế ừ ể ạ
ớ
– AbstractCollection, AbstractSet, AbstractList...
70
• Abstract Implementations