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

Mảng, Chỉ Mục, Tập Hợp phần 6

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 (188.24 KB, 19 trang )

Khi tạo đối tượng ArrayList, không cần thiết phải định nghĩa số đối tượng mà nó
sẽ chứa. Chúng ta thêm vào ArrayList bằng cách dùng phương thức Add(), và danh
sách sẽ quan lý những đối tượng bên trong mà nó lưu giữ. Ví dụ 9.12 sau minh họa sử
dụng ArrayList.
Ví dụ 9.12: Sử dụng ArrayList.
-----------------------------------------------------------------------------

namespace Programming_CSharp

{


using System;

using System.Collections;

// một lớp đơn giản để lưu trữ trong mảng
public class Employee
{


public Employee(int empID)

{


this.empID = empID;

}



public override string ToString()

{


return empID.ToString();

}


public int EmpID

{


get

{







}

set

{



}

}

return empID;






empID = value;

private int empID;

}


public class Tester

{


static void Main()

{



ArrayList empArray = new
ArrayList(); ArrayList intArray = new
ArrayList();
// đưa vào mảng

for( int i = 0; i < 5; i++)

{


empArray.Add( new Employee(i+100));

intArray.Add( i*5 );

}


// in tất cả nội dung

for(int i = 0; i < intArray.Count; i++)

{


Console.Write(“{0} ”,intArray[i].ToString());

}


Console.WriteLine(“\n”);


// in tất cả nội dung của mảng

for(int i = 0; i < empArray.Count; i++)

{


Console.Write(“{0} ”,empArray[i].ToString());

}

Console.WriteLine(“\n”);

Console.WriteLine(“empArray.Count: {0}”, empArray.Count);
Console.WriteLine(“empArray.Capacity: {0}”,
empArray.Capacity);
}

}

}




-----------------------------------------------------------------------------
Kết quả:

0 5 10 15 20


100 101 102 103 104
empArray.Count: 5
empArray.Capacity: 16
-----------------------------------------------------------------------------

Với lớp Array phải định nghĩa số đối tượng mà mảng sẽ lưu giữ. Nếu cố thêm các
thành phần vào trong mảng vượt quá kích thước mảng thì lớp mảng sẽ phát
sinh ra ngoại lệ. Với ArrayList thì không cần phải khai báo số đối tượng mà nó
lưu giữ. ArrayList có một thuộc tính là Capacity, đưa ra số thành phần mà ArrayList
có thể lưu trữ:
public int Capacity {virtual get; virtual set;}
Mặc định giá trị của Capacity là 16, nếu khi thêm thành phần thứ
17 vào thì Capacity tự
động nhân đôi lên là 32. Nếu chúng ta thay đổi vòng lặp như sau:
for( int i = 0; i < 17; i++)
thì kết quả giống như sau:

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

empArray.Capacity: 32
Chúng ta có thể làm bằng tay để thay đổi giá trị của Capacity bằng hay lớn hơn giá trị
Count. Nếu thiết lập giá trị của Capacity nhỏ hơn giá trị của Count, thì chương trình
sẽ phát sinh ra ngoại lệ có kiểu như sau ArgumentOutOfRangeException.

Thực thi IComparable

Giống như tất c

ả những tập hợp, ArrayList cũng thực thi phương thức Sort() để
cho phép chúng ta thực hiện việc sắp xếp bất cứ đối tượng nào thực thi
IComparable. Trong ví dụ kế tiếp sao, chúng ta sẽ bổ sung đối tượng Employee để
thực thi IComparable:
public class Employee: IComparable
Để thực thi giao diện IComparable, đối tượng Employee phải cung cấp một phương
thức
CompareTo():

public int CompareTo(Object o)

{


Employee r = (Employee) o;

return this.empID.CompareTo(r.empID);

}

Phương thức CompareTo() lấy một đối tượng làm tham số, đối tượng Employee phải
so sánh chính nó với đối tượng này và trả về -1 nếu nó nhỏ hơn đối tượng này, 1 nếu
nó lớn hơn, và cuối cùng là giá trị 0 nếu cả hai đối tượng bằng nhau. Việc xác định
thứ tự của Employee thông qua thứ tự của empID là một số nguyên. Do vậy việc so
sánh sẽ được ủy quyền cho thành viên empID, đây là số nguyên và nó s
ẽ sử dụng
phương thức so sánh mặc định của kiểu dữ liệu nguyên. Điều này tương đương với
việc so sánh hai số nguyên. Lúc này chúng ta co thể thực hiện việc so sánh hai đối
tượng Employee. Để thấy được cách sắp xếp, chúng ta cần thiết phải thêm vào các
số nguyên vào trong mảng Employee, các số nguyên này được lấy một cách ngẫu

nhiên. Để tạo một giá trị ngẫu nhiên, chúng ta cần thiết lập mộ
t đối tượng của lớp
Random, lớp này sẽ trả về một số giả số ngẫu nhiên. Phương thức Next() được
nạp chồng, trong đó một phiên bản cho phép chúng ta truyền vào một số nguyên thể
hiện một số ngẫu nhiên lớn nhất mong muốn. Trong trường hợp này chúng ta đưa
vào số 10 để tạo ra những số ngẫu nhiên từ 0 đến 10:
Random r = new Random();

r.Next(10);
Ví dụ minh họa 9.13 tạo ra m
ột mảng các số nguyên và một mảng Employee, sau đó đưa
vào những số ngẫu nhiên, rồi in kết quả. Sau đó sắp xếp cả hai mảng và in kết quả cuối
cùng.
Ví dụ 9.13: Sắp xếp mảng số nguyên và mảng Employee.
-----------------------------------------------------------------------------

namespace Programming_CSharp

{


using System;

using System.Collections;

// một lớp đơn giản để lưu trữ trong mảng
public class Employee : IComparable
{



public Employee(int empID)

{


this.empID = empID;

}


public override string ToString()

{


return empID.ToString();

}


public int EmpID

{

get

{


}


set




return
empID;




{

empID = value;

}

}


// So sánh được delegate cho Employee

// Employee sử dụng phương thức so sánh

// mặc định của số nguyên
public int CompareTo(Object
o)
{



Employee r = (Employee) o;

return this.empID.CompareTo(r.empID);

}


private int empID;

}


public class Tester

{


static void Main()

{


ArrayList empArray = new
ArrayList(); ArrayList intArray = new
ArrayList(); Random r = new
Random();
// đưa vào mảng

for( int i = 0; i < 5; i++)


{


empArray.Add( new Employee(r.Next(10)+100));

intArray.Add( r.Next(10) );

}


// in tất cả nội dung

for(int i = 0; i < intArray.Count; i++)

{


Console.Write(“{0} ”,intArray[i].ToString());

}


Console.WriteLine(“\n”);

// in tất cả nội dung của mảng

for(int i = 0; i < empArray.Count; i++)


×