TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
1
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 8: Collection và Generics
• Collections
•
Th tá ớiáđốit dháhtầ t
•
Th
ao
tá
c v
ới
c
á
c
đối
t
ượng
d
an
h
s
á
c
h
t
u
ầ
n
t
ự
• Dictionaries
• Các collection chuyên biệt hóa (Specialized
Collections)
•
Generic
Generic
• Generic Collections
2
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Collections (tập hợp) là các lớp hỗ trợ thu thập và
quản lý các đối tượng
− Một cách có thứ tự
− Hỗ trợ lưu, tìm kiếm và duyệt các đối tượng trong tập hợp
• Namespace System.Collections của .NET Framework
cung cấp nhiều kiểu tập hợp khác nhau
−
Cần dùng collection nào trong từng trường hợpcụ thể ?
Cần
dùng
collection
nào
trong
từng
trường
hợp
cụ
thể
?
3
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Các kiểu collection thông dụng
− ArrayList
− SortedList
− Queue
− Stack
−
Hashtable
Hashtable
− StringCollection
−
StringDictionary
4
StringDictionary
− ListDictionary
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Thêm và xóa phần tử
−
LớpArrayListlàlớpcơ bảnnhấtnằm ẩn bên trong tất
Lớp
ArrayList
là
lớp
cơ
bản
nhất
,
nằm
ẩn
bên
trong
tất
cả các lớp còn lại.
− Thêm và xóa
p
hần tử khỏi Arra
y
List rất đơn
g
iản.
p y g
− ArrayList cung cấp 2 phương thức để thêm phần tử:
• Add
• AddRange
5
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Thêm phần tử :
−
Thêm phầntử dùng phương thứcAdd
Thêm
phần
tử
dùng
phương
thức
Add
string s=
“
Hello
”
;
ArrayList coll=new ArrayList();
X
coll
coll
string
s= Hello ;
coll.Add(s);
coll.Add(“Hi”);
ll
Add
(0)
“Hello”
“Hi”
50
0
1
2
Nhiềukiểudữ liệukhác
co
ll
.
Add
(
5
0)
;
coll.Add(new object());
50
object
2
3
6
Nhiều
kiểu
dữ
liệu
khác
nhau có thể được lưu
trong ArrayList
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Thêm phần tử
−
ArrayList hỗ trợ phương thức : AddRange để thêm 1
ArrayList
hỗ
trợ
phương
thức
:
AddRange
để
thêm
1
dãy các phần tử
• Từ một array/ collection khác.
Add và AddRange
thêm
p
hần tử vào
ArrayList coll=new ArrayList();
string[] anArray=new string[]{“more”,”or”,”less”};
p
cuối dãy.
coll.AddRange(anArray);
object[] anotherArray=new object[]{new object(),new
Arra
y
List
()};
7
y ()};
coll.AddRange(anArray);
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Thêm phần tử
−
ArrayList cung cấpphương thức Insert và InsertRange
ArrayList
cung
cấp
phương
thức
Insert
và
InsertRange
hỗ trợ thêm phần tử vào 1 vị trí xác định
ArrayList coll = new ArrayList();
coll.Insert(1, "Hey all");
string[] moreString = new string[] {"good night","see you"};
ll
ItR
(
3
St i )
Kếtquả
co
ll
.
I
nser
tR
ange
(
3
, more
St
r
i
ng
)
;
for (int i = 0; i < coll.Count; i++){
Console.WriteLine(
"
Item
"+
i
+"
:
"+
coll[i]);
Kết
quả
là gì ?
8
Console.WriteLine( Item
i
:
coll[i]);
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Thêm phần tử
−
ArrayList hỗ trợ gán giá trị cho đốitượng trong
ArrayList
hỗ
trợ
gán
giá
trị
cho
đối
tượng
trong
collection thông qua index của đối tượng
coll[3]=“du lieu”;
• Chỉ gán giá trị/ ghi đè giá trị cũ
• Khôn
g
thêm mới
p
hần t
ử
g p
9
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Xóa phần tử
−
ArrayList hỗ trợ các phương thức xóa phầntử khỏi
ArrayList
hỗ
trợ
các
phương
thức
xóa
phần
tử
khỏi
collection
• Remove
• RemoveAt
• RemoveRange
10
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Xóa phần tử
//
óhầ tử dù R
//
x
ó
a p
hầ
n
tử
dù
ng
R
emove
coll.Add(“du lieu”);
coll.
Remove
(
“
du lieu
”
);
Remove
coll.
Remove
(du
lieu );
// xóa phần tử dùng RemoveAt
coll.RemoveAt(0);
//
óhầ tử dù R R
RemoveAt
//
x
ó
a p
hầ
n
tử
dù
ng
R
emove
R
ange
coll.RemoveRange(0,4);
RemoveRange
11
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
ỗ ầ
• Phương thức h
ỗ
trợ thêm/ xóa ph
ầ
n t
ử
− Clear
− IndexOf
− Contains
string myString=“My String”;
if (coll.Contains(myString)){
int index=coll
IndexOf
(myString);
int
index=coll
.
IndexOf
(myString);
coll.RemoveAt(index);
}
12
else
coll.Clear();
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Duyệt các phần tử
−
ArrayList hỗ trợ nhiều cách duyệt các phầntử trong
ArrayList
hỗ
trợ
nhiều
cách
duyệt
các
phần
tử
trong
collection
• Dùng chỉ mục phần tử (index)
• Dùng interface IEnumerable và Enumerator
• Dùng cấu trúc foreach
13
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
•
D ệtá hầ tử
•
D
uy
ệt
c
á
c p
hầ
n
tử
for (int i=0;i<coll.Count;i++){
Chỉ mục
Console.WriteLine(coll[i]);
}
IEnumerator e
=
coll.GetEnumerator();
bl
IEnumerator
e coll.GetEnumerator();
while(e.MoveNext()){
Console.WriteLine(e.Current);
IEnumera
bl
e
}
foreach (object item in coll){
Console WriteLine(item);
foreach
14
Console
.
WriteLine(item);
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Collections
• Sắp xếp phần tử
−
ArrayList hỗ trợ phương thứcSortđể sắpxếpcác
ArrayList
hỗ
trợ
phương
thức
Sort
để
sắp
xếp
các
phần tử trong collection.
coll.Sort();
• Phương thức Sort dùng lớp Comparer thực hiện so sánh
• Comparer thực thi interface IComparer
• Phương thức Sort cho phép chỉ định đối tượng IComparer
thay cho đối tượng mặc định
coll.Sort
(
new CaseInsentitiveCom
p
arer
());
15
(
p
());
• Có thể tự tạo Comparer nếu có nhu cầu
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Danh sách tuần tự
−
Là một collection
Là
một
collection
− Chỉ cho phép truy xuất tuần tự từng phần tử
−
Mỗilầnchỉ truy xuất1phầntử
−
Mỗi
lần
chỉ
truy
xuất
1
phần
tử
16
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Queue
•
Stack
•
Stack
17
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
•
Q
ueue
Q
− Là danh sách tuần tự hỗ trợ truy xuất phần tử tuần tự
theo mô hình first-in, first-out (FIFO)
• Thêm phần tử vào cuối danh sách
• Lấy phần tử đầu ra khỏi danh sách
ố
− Một s
ố
thuộc tính và phương thức quan trọng
• Thuộc tính
––
CountCount
––
CountCount
• Phương thức
–– EnQueueEnQueue
18
–– DeQueueDeQueue
–– PeekPeek
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Thêm/ xóa phần tử
QQ()
X
q
Q
ueue q=new
Q
ueue
()
;
q.EnQueue(“Item 1”);
X
Item 1
q
q
q.EnQueue(“Item 2”);
q.EnQueue(“Item 3”);
Console.WriteLine(q.DeQueue());
Item 2
Item 3
q
Console.WriteLine(q.DeQueue());
Item 1
Item 2
19
Item
2
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Tìm phần tử
−
Duyệt Queue
Duyệt
Queue
− Dùng DeQueue lấy ra và so sánhÆphần tử không còn
tron
g
Queue
g
− Tìm phần tử mà không lấy nó ra khỏi Queue: dùng
phương thức Peek
if (q.Peek() is String){
Console.WriteLine(q.DeQueue());
20
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Stack
− Là danh sách tuần tự hỗ trợ truy xuất phần tử theo mô
hình last
in first
out (LIFO)
hình
last
-
in
,
first
-
out
(LIFO)
.
• Thêm phẩn tử vào cuối danh sách
• Lấ
y
p
hần tử cuối ra khỏi danh sách
yp
− Một số thuộc tính và phương thức quan trọng
• Thuộc tính
–– CountCount
• Phương thức
––PopPop
21
––PushPush
–– PeekPeek
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Thêm/ xóa phần tử
St k St k()
X
s
St
ac
k
s=new
St
ac
k()
;
s.Push(“Item 1”);
X
Item 1
s
s
s.Push(“Item 2”);
s.Push(“Item 3”);
Console.WriteLine(s.Pop());
ClWitLi(
P
())
Item 2Item 3
C
onso
l
e.
W
r
it
e
Li
ne
(
s.
P
op
())
;
Item 2
Item 3
22
Item
3
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Danh sách tuần tự
• Tìm phần tử
−
DuyệtStack
Duyệt
Stack
− Dùng Pop lấy ra và so sánhÆphần tử không còn trong
Stack
− Tìm phần tử mà không lấy nó ra khỏi Stack: dùng
phương thức Peek
if (s.Peek() is String){
Console.WriteLine(s.Pop());
23
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Dictionaries
• Tập hợp lưu các phần tử có thứ tự theo từng
c
ặp
ke
y
/ value
ặpy
• Cho phép tìm kiếm phần tử theo key
24
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Dictionaries
• HashTable
•
SortedList
•
SortedList
• ListDictionary
• HybirdDictionary
• OrderedDictionar
y
y
25