Lớp Vector và giao diện Enumeration

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 67 - 70)

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.

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 {

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); 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:

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 67 - 70)