Tải bản đầy đủ (.pdf) (9 trang)

Lưu trữ và xử lý đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (647.1 KB, 9 trang )

Đ tài 5. L u tr và x lý đ i t ngề ư ữ ử ố ượ
Trong ph n này chúng ta s đ c p t i các l p ti n ích c a Java trong gói java.util dùngầ ẽ ề ậ ớ ớ ệ ủ
cho vi c l u tr và x lý các đ i t ng.ệ ư ữ ử ố ượ
I. L p Vector và giao di n Enumerationớ ệ
I.1 L p Vectorớ
L p trình viên dùng l p Vector đ l u tr các đ i t ng có ki u gi ng nhau nh ng cóậ ớ ể ư ữ ố ượ ể ố ư
th thay đ i đ ng v kích th c tùy theo nhu c u. Chúng ta s xem xét vi c s d ng interfaceể ổ ộ ề ướ ầ ẽ ệ ử ụ
Enumeration đ cho phép duy t l p trên các c u trúc nh Vector.ể ệ ặ ấ ư
Kích th c c a Vector đ c tăng theo m t l ng đ t tr c ho c đ c t đ ng tăngướ ủ ượ ộ ượ ặ ướ ặ ượ ự ộ
g p đôi khi ta c n tăng dung l ng c a nó. Vì v y thao tác chèn m t ph n t m i vào m tấ ầ ượ ủ ậ ộ ầ ử ớ ộ
Vector s nhanh h n khi kích th c c a nó còn đ dùng.ẽ ơ ướ ủ ủ
Vector l u tr tham chi u c a các đ i t ng nên ch ng trình có th dùng Vector đư ữ ế ủ ố ượ ươ ể ể
l u tham chi u đ n b t kỳ đ i t ng nào. Đ l u các giá tr d li u nguyên th y, ta ph i sư ế ế ấ ố ượ ể ư ị ữ ệ ủ ả ử
d ng các l p trong java.lang nh Integer, Long hay Float thay vì dùng chính ki u đó.ụ ớ ư ể
Sau đây là m t ví d nh p vào 10 s nguyên, l u vào m t Vector r i in ra đ ki m tra:ộ ụ ậ ố ư ộ ồ ể ể

// Nhâp 10 doi tuong so nguyen
1. java.util.Vector v = new java.util.Vector(5,2);
2. for (int i=0;i<10;i++)
3. {
4. System.out.print("Nhap so nguyen thu " + String.valueOf(i) + ":");
5. java.lang.Integer p = new java.lang.Integer(nhap.nextInt());
6. v.addElement(p);
7. }
8. // In ra de kiem tra
9. for (int i=0;i<10;i++)
10. {
11. System.out.print("So nguyen thu " + String.valueOf(i) + " la:");
12. System.out.println(v.get(i));
13. }
14. System.out.println(v.size());


15. System.out.println(v.capacity());
Dòng 1: Khai báo m t đ i t ng v thu c l p Vector. đây ta đã dùng m t constructorộ ố ượ ộ ớ Ở ộ
v i 2 tham s là s ph n t ban đ u và s s tăng khi Vector có nhu c u tăng (m c đ nh sớ ố ố ầ ử ầ ố ẽ ầ ặ ị ẽ
g p đôi s hi n có). L p Vector có 3 constructor:ấ ố ệ ớ
• N u dùng constructor không tham s thì Java t đ ng c p cho ta s ph n t banế ố ự ộ ấ ố ầ ử
đ u là 10 và nhân đôi m i khi có nhu c u m r ng.ầ ỗ ầ ở ộ
• N u là 1 tham s thì đâu là s ph n t ban đ u, khi c n cũng t đ ng nhân đôi.ế ố ố ầ ử ầ ầ ự ộ
• N u là 2 tham s thì tham s th nh t ch s ph n t ban đ u, tham s th 2 chế ố ố ứ ấ ỉ ố ầ ử ầ ố ứ ỉ
s ph n t đ c thêm vào m i khi dung l ng c a Vector b h t. ố ầ ử ượ ỗ ươ ủ ị ế
Dòng 2-7: Vòng l p đ nh p và l u k t qu nh p vào Vector. ặ ể ậ ư ế ả ậ đây ta ph i khai báoỞ ả
m t bi n đ i t ng ki u Integer ch không ph i là m t ki u nguyên th y int. Sau đó dùngộ ế ố ượ ể ứ ả ộ ể ủ
ph ng th c addElement() đ thêm đ i t ng này vào v trí cu i c a Vector.ươ ứ ể ố ượ ị ố ủ
69
Ngoài ra ta cũng có th s d ng insertElementAt() đ chèn phể ử ụ ể n t vào m t v trí xácầ ử ộ ị
đ nh ho c s d ng setElementAt() đ đ t giá tr cho m t ph n t t i m t v trí.ị ặ ử ụ ể ặ ị ộ ầ ử ạ ộ ị
S d ng removeElement(Object) đ xóa m t ph n t xu t hi n đ u tiên trong Vectorử ụ ể ộ ầ ử ấ ệ ầ
có giá tr b ng v i Object.ị ằ ớ
Dòng 12: Dùng ph ng th c get(ch s ) đ in ra giá tr c a ph n t có ch s t ngươ ứ ỉ ố ể ị ủ ầ ử ỉ ố ươ
ng. Th c ra thì ph ng th c get(ch s ) cho ta m t tham chi u đ n đ i t ng có ch sứ ự ươ ứ ỉ ố ộ ế ế ố ượ ỉ ố
t ng ng đ c l u trong Vector nh ng đây đ i t ng s nguyên đã t đ ng in ra giá tr .ươ ứ ượ ư ư ở ố ượ ố ự ộ ị
Dòng 14: Ph ng th c tr v kích th c th c t c a Vector, t c là s ph n t th c sươ ứ ả ề ướ ự ế ủ ứ ố ầ ử ự ự
Vector l u tr (=10) .ư ữ
Dòng 15: Kích s l ng các ph n t t i đa hi n có c a Vector (=11).ố ượ ầ ử ố ệ ủ
M t s ph ng th c c a Vector:ộ ố ươ ứ ủ
removeElementAt: Xóa m t ph n t m t v trí xác đ nh.ộ ầ ử ở ộ ị ị
removeAllElements(): Xóa t t c các ph n t .ấ ả ầ ử
firstElement(): Tr v tham chi u t i ph n t đ u tiên.ả ề ế ớ ầ ử ầ
lastElement(): Tr v tham chi u t i ph n t cu i cùng trong Vector.ả ề ế ớ ầ ử ố
isEmpty(): Xác đ nh li u Vector là tr ng.ị ệ ố
contains(key): đ ki m tra xem trong vector có ph n t so kh p v i key hay không. Đ iể ể ầ ử ớ ớ ố

t ng key và các ph n t c a Vector đ ck so sánh v i nhau b i ph ng th c equals(). Cácượ ầ ử ủ ươ ớ ở ươ ứ
l p th ng khai báo ch ng ph ng th c equals() đ dùng trong vi c so sánh các đ i t ngớ ườ ồ ươ ứ ể ệ ố ượ
c a mình.ủ
indexOf(Object): Tr v ch s c a đ i t ng đ u tiên so kh p v i Object.ả ề ỉ ố ủ ố ượ ầ ớ ớ
trimToSize(): Gi m s l ng ph n t c a Vector.ả ố ượ ầ ử ủ
I.2 Giao di n Enumerationệ
S d ng ph ng th c elements() c a m t đ i t ng Vector s tr v m t đ i t ngử ụ ươ ứ ủ ộ ố ượ ẽ ả ề ộ ố ượ
Enumeration cho phép ch ng trình duy t l p trên danh sách ph n t c a Vector.ươ ệ ặ ầ ử ủ
Đ i t ng Enumeration có các ph ng th c quan tr ng sau:ố ượ ươ ứ ọ
hasMoreElement(): Tr v true n u v n còn ph n t trong Vector.ả ề ế ẫ ầ ử
nextElement(): Tr v tham chi u t i ph n t ti p theo trong Vector.ả ề ế ớ ầ ử ế
Đo n ch ng trình sau duy t và in ra danh sách các sinh viên:ạ ươ ệ
abstract class People
{
protected int NamSinh;//Nam Sinh
protected String HoVaTen; //Ho Va Ten
//constructor
public People(int ns,String ht)
{
NamSinh=ns;
HoVaTen=ht;
}
// Phuong thuc tinh tuoi
protected abstract int TinhTuoi();
public abstract String toString();
}
// Ke thua lop People
public class SinhVien extends People
70
{

private String Lop;// Ten lop
private double DiemTongKet; // Diem tong ket
public final String mauda ="vang";//Hang so
private int ID;// Ma so SinhVien
protected static int MaSo;// ma so chung de cap phat cho moi sinh vien
// constructor
public SinhVien(int ns,String ht,String l,double dtk)
{
super(ns,ht);//goi constructor cua lop cha la People
Lop = l;
DiemTongKet=dtk;
// Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop
ID=MaSo;
// Tang ma so len 1 den gan cho SinhVien sau
MaSo+=1;
}
// Phuong thuc tinh tuoi
protected int TinhTuoi()
{
java.util.Date homnay = new java.util.Date();
return (homnay.getYear() - NamSinh +1);
}
// Khai bao chong phuong thuc toString()
public String toString()
{
return "Ma so:" + String.valueOf(ID)+ "\n"
+"Tuoi:"+ String.valueOf(this.TinhTuoi()) + "\n"
+"Diem Tong Ket:"+ String.valueOf(DiemTongKet)+"\n"
+"Ho va ten:"+ HoVaTen;
}

// Ham main
public static void main(String[] argv)
{
// Dat gia tr? bien static, sinh vien dau tien co ma so 1
SinhVien.MaSo=1;
// bien doi tuong Vector
java.util.Vector sv = new java.util.Vector(5);
SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5);
sv.addElement(k1); // Them sinh vien vao Vector
SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6);
sv.addElement(k2);
SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7);
sv.addElement(k3);
SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8);
sv.addElement(k4);
SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9);
71
sv.addElement(k5);
// Dung interface Enumeration de duyet cac phan tu cua Vector
java.util.Enumeration enu = sv.elements();
while (enu.hasMoreElements())
{
// Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc
SinhVien g = (SinhVien)enu.nextElement();
System.out.println(g.toString());
}
//People p = new People(20,"Pham Anh Hoa"); bao loi vi People là l p tr uớ ừ
t ngượ

}

}
K t qu th c hi n nh sau:ế ả ự ệ ư
II. M ng trong Java và l p ArrayListả ớ
II.1 M ng trong Javaả
Trong ph n “Ngôn ng Java căn b n” ta đã xem xét m t bi n m ng đ c khai báo vàầ ữ ả ộ ế ả ượ
s d ng nh th nào. Trong ph n này ta s đi sâu khai thác các đ c tính c a m ng và m t sử ụ ư ế ầ ẽ ặ ủ ả ộ ố
thu t toán thông d ng thông qua các ví d .ậ ụ ụ
Ví d : Đ m t n su t c a các ph n t c a m t m ng:ụ ế ầ ấ ủ ầ ử ủ ộ ả
import javax.swing.*;
public class StudentPoll {
// Hàm main
72
public static void main( String args[] )
{
// Khai báo m t m ng các câu tr l iộ ả ả ờ
int TraLoi[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5,
6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };
// M ng đ m t n su tả ế ầ ấ
int TanSuat[] = new int[ 11 ];
// V i m i ph n t c a mang TraLoi, s d ng giá tr đó nh là ch s c a m ngớ ỗ ầ ử ủ ử ụ ị ư ỉ ố ủ ả
TanSuat sau đó đ m s xu t hi n c a nó trong TraLoi, l u giá tr vào m ng TanSuat t i v tríế ự ấ ệ ủ ư ị ả ạ ị
t ng ng.ươ ứ
for ( int answer = 0; answer < TraLoi.length; answer++ )
++frequency[ TraLoi[ answer ] ];
// Đ a k t qu vào m t chu iư ế ả ộ ỗ
for ( int rating = 1; rating < TanSuat.length; rating++ )
output += rating + "\t" + TanSuat[ rating ] + "\n";
// In ra
System.out.print(out);
} }

Trong ví d này, các câu tr l i n m trong kho ng t 1 đ n 10 nên khai báo m t m ngụ ả ờ ằ ả ừ ế ộ ả
11 ph n t đ có th s d ng chính giá tr 10 làm ch s c a m ng. Ch c n duy t m ngầ ử ể ể ử ụ ị ỉ ố ủ ả ỉ ầ ệ ả
TraLoi 1 l n ta đã có ngay k t qu .ầ ế ả
II.2. Các thu t toán c b n trên m ngậ ơ ả ả
Ví d : S p x p tuy n tínhụ ắ ế ế
Đây là m t ví d s p x p các ph n t c a m ng tăng d n theo thu t toán “n i b t” -ộ ụ ắ ế ầ ử ủ ả ầ ậ ổ ọ
t c là sau m i vòng l p duy t, ph n t nào l n nh t s b đ y xu ng cu i cùng. ứ ỗ ặ ệ ầ ử ớ ấ ẽ ị ẩ ố ố
// S p x p các ph n t c a m ngắ ế ầ ử ủ ả
public void bubbleSort( int array2[] )
{
// Duy t qua m i ph n t c a m ngệ ỗ ầ ử ủ ả
for ( int pass = 1; pass < array2.length; pass++ ) {
// Vòng l p so sánh và đ i chặ ổ ỗ
for ( int element = 0; element < array2.length - pass; element++ ) {
// So sánh 2 ph n t li n k và đ i ch n u c nầ ử ề ề ổ ỗ ế ầ
if ( array2[ element ] > array2[ element + 1 ] )
swap( array2, element, element + 1 );
} }
}
// Hàm đ i ch 2 ph n t c a m t m ngổ ỗ ầ ử ủ ộ ả
public void swap( int array3[], int first, int second )
{
int hold; // Bi n trung gian đ hoán đ iế ể ổ
hold = array3[ first ];
array3[ first ] = array3[ second ];
array3[ second ] = hold;
73

×