Chương 6:
Mảng, chỉ mục và tập hợp
Giảng viên: Ths. Nguyễn Thị Khiêm Hòa
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
Nội dung
Mảng
Giao diện tập hợp
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
2
Danh sách
Định nghĩa
Danh sách là dãy hữu hạn có thứ tự của các phần tử
thuộc một lớp đối tượng.
Ký hiệu: L(a1, a2, …, an)
Danh sách tuyến tính là danh sách mà quan hệ lân cận
giữa các phần tử được hiển thị
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
3
Danh sách
Tổ chức lưu trữ danh sách trong bộ nhớ
Mảng - Danh sách đặc
Danh sách liên kết – Danh sách động
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
4
Mảng
Tập hợp các phần tử cùng kiểu dữ liệu, nằm liên tiếp
trong bộ nhớ
Có chỉ số bắt đầu từ 0
Giá trị mặc định của từng phần tử trong mảng quy định
theo từng kiểu đối tượng
Mảng là đối tượng
Kích thước: có thể là 1 hoặc nhiều chiều
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
5
Tạo mảng
Khai báo
<kiểu dữ liệu> [ ] <tên biến mảng>;
Ví dụ: int [ ] array;
Khởi tạo
<kiểu DL> [ ] <tên biến mảng> = new <kiểu DL> [<số pt>];
Ví dụ: int[ ] array = new int[5];
Mảng đối tượng
<kiểu đt> [ ] <tên biến mảng> = new <kiểu đt> [<số pt>];
Ví dụ: Animal [ ] animals = new Animal [10];
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
6
Khởi tạo và truy xuất mảng
Có thể dùng dấu { } để khởi tạo giá trị cho các
phần tử mảng
int[] numbers = {10, 9, 8, 7, 6, 5,
4, 3, 2, 1, 0};
numbers[4] = 6;
string[] animal = {"Mouse", "Cat",
"Lion"};
animal[1]= "Elephant";
string someAnimal = animal[2];
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
7
Câu lệnh foreach
Dùng câu lệnh foreach để lặp lại việc truy xuất
từng phần tử trong mảng
int[] numbers = {4,5,6,1,2,3,-2,-1,0};
int Tong = 0;
foreach (int a in numbers)
{
Tong += a;
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
8
Truyền tham số mảng vào phương thức
Dùng từ khóa params để truyền tham số mảng
public int Sum(params int[] list)
{
int total = 0;
foreach ( int i in list )
{
total += i;
}
return total;
}
...
int [] pe;
...
int value = pe.Sum( 1, 3, 5, 7, 9, 11 );
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
9
Chỉ mục đối tượng
Dùng từ khóa this với get và set trong properties
public class Zoo
{
private Animal[] theAnimals;
public Animal this[int i]
{
get {return theAnimals[i];}
set {theAnimals[i] = value;}
}
. . .
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
10
Chỉ mục đối tượng
public class MyList
{
private string [] str;
private int idx = 0;
public string this[int index]
{
get {return str[index];}
set {str[index] = value;}
}
public MyList(params string[] InitStr)
{
str = new String[256];
foreach (string s in InitStr)
str[idx++] = s;
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
11
Chỉ mục đối tượng
public void Add(string st)
{
if (idx > str.Length)
return;
else
str[idx++] = st;
}
public int GetNumEntries()
{
return idx;
}
}//end class
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
12
Chỉ mục đối tượng
public class Test
{
static void Main()
{
MyList ml = new MyList("Cau truc du lieu",
"CSDL");
ml.Add("Lap trinh huong doi tuong");
ml.Add("Phan tich thiet ke he thong");
string sttest = "Co so du lieu";
ml[1] = sttest;
for (int i = 0; i < ml.GetNumEntries();i++)
Console.WriteLine("{0}", ml[i]);
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
13
Chỉ mục đối tượng
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
14
Bài tập
Thực hiện
Xây dựng lớp mảng số nguyên, thực hiện
việc tính tổng, tổng chẳn, tổng lẻ … trong
mảng
Xây dựng lớp Zoo chứa các động vật có
trong lớp Animal.
45 min
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
15
Các lớp đối tượng tập hợp (Collections)
Khái niệm
Sử dụng lớp ArrayList, List<T>
Hàng đợi (Queue), ngăn xếp (Stack)
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
16
Khái niệm
Danh sách, hàng đợi, ngăn xếp là một số các CTDL
thông thường trong ứng dụng
Danh sách (List): là tập hợp các phần tử truy xuất bởi
chỉ mục (index)
Ví dụ: mảng; ArrayList
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
17
ArrayList Class
Hạn chế của mảng
Không linh động
Tốn bộ nhớ
Lớp ArrayList cho phép gia tăng số phần tử khi cần
Có thể chứa các phần tử dữ liệu không cùng kiểu.
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
18
ArrayList Class
Khai báo:
Thư viện
using System.Collection
ArrayList
ArrayList <Tên_biến> = new ArrayList();
Thư viện System.Collection
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
19
Các thuộc tính của ArrayList
Thuộc tính
Capacity
Count
Ghi chú:
Thuộc tính Capacity có giá trị mặc định là 16, khi số
phần tử lớn hơn, Capacity tự động nhân đôi.
Nếu gán giá trị cho Capacity < Count thì sẽ sinh ra lỗi
ArgumentOutofRangeException
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
20
Phương thức ArrayList Class
Add
Sort
AddRange
BinarySearch
Clear
Reverse
CopyTo
TrimToSize
Remove
RemoveAt
RemoveRange
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
21
ArrayList Class
public class Employee
{
private int empID;
public Employee(int empID)
{
this.empID = empID;
}
public int EmpID
{
get { return empID;}
set { empID = value;}
}
public override string ToString()
{
return empID.ToString();
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
22
ArrayList Class
Class Test
{
static void main()
{
ArrayList empArr = new ArrayList();
for(int i=0; i<5; i++)
empArr.Add(new Employee(i*5));
for(int i=0; i
Console.Write(“{0}”,empArr[i].ToString());
Console.WriteLine(“\nempArr.Capacity:{0}”,
empArr.Capacity);
}
}
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
23
ArrayList Class
Kết quả:
0
5
10
15
20
empArr.Capacity: 16
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
24
List <T>
Là mảng đối tượng không giới hạn số phần tử.
Khai báo
List<kiểu DL> tên_biến = new
List<kiểu DL>;
Ví dụ:
List<Employee> empArray = new List<Emplyee>;
Khoa Công nghệ Thông tin - Đại học Ngân hàng TP.HCM
25