bài 8 - collection generics - nền tảng lập trình ứng dụng với c#

75
TRƯỜNG ĐẠI HC KHOA HC TNHIÊN TP.HCM TRUNG TÂM TIN HC 1

Upload: hoc-lap-trinh-web

Post on 30-Jun-2015

4.658 views

Category:

Documents


10 download

DESCRIPTION

Collections Thao tác vớicác đối tượng danhsách tuần tự Dictionaries Các collection chuyên biệt hóa (Specialized Collections) Generic Generic Collections

TRANSCRIPT

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 á đối t d h á h t ầ t• Thao tác với các đối tượng danh sách tuần tự• Dictionaries• Các collection chuyên biệt hóa (Specialized

Collections)• GenericGeneric• 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ợp cụ 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

− HashtableHashtable

− 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ớp ArrayList là lớp cơ bản nhất nằm ẩn bên trong tấtLớ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 phần tử khỏi ArrayList rất đơn giả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ần tử dùng phương thức AddThêm phần tử dùng phương thức Add

string s=“Hello”;ArrayList coll=new ArrayList(); X

coll

collstring s= Hello ;coll.Add(s);coll.Add(“Hi”);

ll Add( 0)

“Hello”

“Hi”

50

0

1

2

Nhiều kiểu dữ liệu khác

coll.Add(50);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 1ArrayList 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 phần tử vào

ArrayList coll=new ArrayList();string[] anArray=new string[]{“more”,”or”,”less”};

pcuối dãy.

coll.AddRange(anArray);object[] anotherArray=new object[]{new object(),new

ArrayList()};

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ấp phương thức Insert và InsertRangeArrayList cung cấp phương thức Insert và InsertRange

hỗ trợ thêm phần tử vào 1 vị trí xác địnhArrayList coll = new ArrayList();coll.Insert(1, "Hey all");string[] moreString = new string[] {"good night","see you"};

ll I tR (3 St i ) Kết quảcoll.InsertRange(3, moreString);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 đối tượng trongArrayList hỗ trợ gán giá trị cho đối tượng trong

collection thông qua index của đối tượngcoll[3]=“du lieu”;

• Chỉ gán giá trị/ ghi đè giá trị cũ• Không thêm mới phầ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ần tử khỏiArrayList 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 phần tử dùng Removecoll.Add(“du lieu”);coll.Remove(“du lieu”);

Remove

coll.Remove( du lieu );// xóa phần tử dùng RemoveAtcoll.RemoveAt(0);// ó hầ tử dù R R

RemoveAt

// xóa phần tử dùng RemoveRangecoll.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

− Containsstring myString=“My String”;if (coll.Contains(myString)){

int index=coll IndexOf(myString);int index=coll.IndexOf(myString);coll.RemoveAt(index);

}

12

elsecoll.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ần tử trongArrayList 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ử• Duyệt các phần tử

for (int i=0;i<coll.Count;i++){Chỉ mụcConsole.WriteLine(coll[i]);

}IEnumerator e=coll.GetEnumerator();

blIEnumerator e coll.GetEnumerator();while(e.MoveNext()){

Console.WriteLine(e.Current);

IEnumerable

}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ức Sort để sắp xếp cácArrayList 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 địnhcoll.Sort(new CaseInsentitiveComparer());

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 collectionLà một collection

− Chỉ cho phép truy xuất tuần tự từng phần tử

− Mỗi lần chỉ truy xuất 1 phần tử− 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ự• QueueQ− 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ửQ Q () X

qQueue q=new Queue();

q.EnQueue(“Item 1”);

X

Item 1

q

q

q.EnQueue(“Item 2”);q.EnQueue(“Item 3”);Console.WriteLine(q.DeQueue());

Item 2

Item 3q

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 QueueDuyệt Queue

− Dùng DeQueue lấy ra và so sánh phần tử không còn trong Queueg

− 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 phần tử cuối ra khỏi danh sáchy p

− 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

sStack s=new Stack();

s.Push(“Item 1”);

X

Item 1

s

s

s.Push(“Item 2”);

s.Push(“Item 3”);Console.WriteLine(s.Pop());

C l W it Li ( P ())

Item 2Item 3

Console.WriteLine(s.Pop());

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ệt StackDuyệ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 key/ valueặp y

• 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• OrderedDictionaryy

25

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries• HashTable• HashTable− Lớp Dictionary được dùng để

• ánh xạ(map) một key vào 1 value• ánh xạ(map) một key vào 1 value• tạo lookup-table map một key duy nhất với 1 value duy

nhất

− Lớp HashTable dùng cách trên để lưu trữ các cặp key/ value

HashTable emailLookup=new HashTable();emailLookup.Add(“[email protected]”,”Bishop, Scott”);emailLookup[“[email protected]”]=“Bishop, Scott”;

26

emailLookup[ [email protected] ] Bishop, Scott ;

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries• HashTable− Từ điển được dùng để tìm kiếm các cặp key/value

ầduyệt các phần tử sẽ không trực quan

HashTable emailLookup=new HashTable();System Collections DictionaryEntry

emailLookup[“[email protected]”]=“Bishop, Scott”;emailLookup[“[email protected]”]=“Hess, Christian”;emailLookup[“djump@contoso com”]=“Jump Dan”;

System.Collections.DictionaryEntrySystem.Collections.DictionaryEntrySystem.Collections.DictionaryEntry

emailLookup[ [email protected] ]= Jump, Dan ;foreach (object name in emailLookup){

Console.WriteLine(name);

27

}

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries

• HashTable− Nguyên nhân:Nguyên nhân:

• Chỉ duyệt các đối tượng bên trong Dictionary• Không duyệt trực tiếp key/ valueg yệ ự p y

foreach (DictionaryEntry entry in emailLookup){Console.WriteLine(entry.Name);//Console.WriteLine(entry.Value);

}

28

− DictionaryEnrty chứa key và value

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries• HashTable− Lớp HashTable sử dụng 1 số nguyên (gọi là hash) hỗ

trợ việc lưu trữ các key• HashTable sử dụng số hash để tăng tốc quá trình tìm kiếm

1 key trong collection.y g• HashTable cho phép có 1 giá trị hash duy nhất làm key,

các value có thể trùng nhau

H ht bl h H ht bl ()Số hash của “First” =ố h h ủ “Fi t”Hashtable h=new Hashtable();

h[“First”]=“1st”;h[“First”]=“First”;

số hash của “First”chỉ là 1 phần tử

29

h[ First ] First ;Console.WriteLine(“So phần tu: “+h.Count);

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionarieskey1 và key 2 là 2

• Hashtablepublic class Fish{ Hastable h=new HashTable();

key1 và key 2 là 2object khác nhau sốhash khác nhau

p {string name;public Fish(string _name){

();Fish key1=new Fish(“Herring”);Fish key2=new Fish(“Herring”);

name=_name;}

}

h[key1]=“Hello”;h[key2]=“Hello”C l W it Li (“S h t} Console.WriteLine(“So phan tu:

“+h.Count);

So phan tu: 2

30

p

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries

• Hashtablepublic override int GetHashCode(){ public override bool Equals(object p (){

return name.GetHashCode();}

p q ( jobj){Fish otherFish=obj as Fish;if (otherFish==null)if (otherFish null)

return false;return otherFish.name==name;

• 2 thể hiện của Fish có cùng số hash

• HashTable xem chúng là }HashTable xem chúng là cùng 1 đối tượng?− Không: 2 đối tượng là 2 thể

hiện khác nhau

2 thể hiện có cùng sốhash, HashTable xemchúng là cùng 1 đối

31

chúng là cùng 1 đốitượng

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries• SortedListSortedList− Là một lớp từ điển

− Có nhiều điểm giống với 1 danh sách thông thường− Có nhiều điểm giống với 1 danh sách thông thườngSortedList s=new SortedList();s[“First”]=“1st”;s[“Second”]=“2nd”;s[“Third”]=“3rd”;s[“Fourth”]=“4th”;s[ Fourth ]= 4th ;s[“fourth”]=“4th”;foreach (DictionaryEntry e in s){

32

Console.WriteLine(“{0}= {1}”,e.Key,e.Value);}

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Dictionaries

• SortedList− SortedList hỗ trợ thêm 1 số thuộc tính và phương thứcSortedList hỗ trợ thêm 1 số thuộc tính và phương thức

truy xuất key/ value thông qua index.

− Là lớp được sắp xếp: index của mỗi phần tử có thể ổ ầ

p p p pthay đổi khi thêm/ xóa phần tử.

− Có thể chỉ định IComparer khi tạo SortedList để điều khiển cách thức sắp xếp của danh sáchkhiển cách thức sắp xếp của danh sách.SortedList s=new SortedList(new DescendingComparer());…

33

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries

• Khi các từ điển chuẩn (standard dictionary) giới hạn về chức năng/ thể hiện, .NET hỗ trợ 3 loại từ điển h ê biệtchuyên biệt:− ListDictionary

H bi dDi i− HybirdDictionary

− OrderdDictionary

34

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries

• ListDictionary− HashTable là một tập hợp hiệu quảHashTable là một tập hợp hiệu quả

− Một số khuyết điểm của HashTable• Cần nhiều tài nguyênCần nhiều tài nguyên• Gặp trở ngại về thể hiện với những tập hợp nhỏ (<10 phần

tử)

− ListDictionary:• Hoạt động như một mảng đơn giản• Hiệ ả h tậ h hỏ

35

• Hiệu quả cho tập hợp nhỏ• Có cùng interface với HashTable

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries

• ListDictionaryListDictionary emailLookup=new ListDictionary();y p y();emailLookup[“[email protected]”]=“Bishop, Scott”;emailLookup[“[email protected]”]=“Hess, Christian”;

ilL k [“dj @ t ”] “J D ”emailLookup[“[email protected]”]=“Jump, Dan”;foreach (DictionaryEntry entry in emailLookup){

Console.WriteLine(entry.Value);}

36

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries• HybirdDictionaryHybirdDictionary− Có cùng interface với HashTable

Đ dù khi khô biết õ ố hầ tử ủ tậ h− Được dùng khi không biết rõ số phần tử của tập hợp• HybirdDictionary thực thi như một ListDictionary• Tự động chuyển thành HashTable khi số phần tử tăng lênTự động chuyển thành HashTable khi số phần tử tăng lên

quá nhiều (1 cách ngầm định)HybirdDictionary emailLookup=new HybirdDictionary();emailLookup[“sbishop@contoso com”]=“Bishop Scott”;emailLookup[ [email protected] ]= Bishop, Scott ;emailLookup[“[email protected]”]=“Hess, Christian”;emailLookup[“[email protected]”]=“Jump, Dan”;

37

foreach (DictionaryEntry entry in emailLookup){Console.WriteLine(entry.Value); }

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries

• OrderedDictionary− Nếu cần chức năng của HashTable và quản lý thứ tựNếu cần chức năng của HashTable và quản lý thứ tự

của các phần tử trong tập hợp ?

− Với HashTable:• Không truy xuất phần tử qua index• Gặp giới hạn khi duyệt với enumerator

− OrderedDictionary được dùng khi:• Xây dựng từ điển truy xuất nhanh

38

• Quản lý các phần tử một cách có thứ tự

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Specialized Dictionaries

• OrderedDictionary− Chức năng tương tự HashTableChức năng tương tự HashTable

− Bổ sung thêm 1 số phương thức và thuộc tính hỗ trợ truy xuất phần tử qua chỉ mụcy p q• Thuộc tính

–– ItemItem

• Phương thức–– InsertInsert–– RemoveAtRemoveAt

39

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• Các tập hợp đã trình bày ở trên đều cho phép lưu trữ phần tử có kiểu dữ liệu bất kỳ− Cần ép kiểu khi truy xuất các phần tử

• .NET cung cấp namespace S C ll i S i li d hứ á ậ h hỗSystem.Collections.Specialized chứa các tập hợp hỗ trợ xử lý các kiểu dữ liệu xác định

40

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitArray• BitVector32• BitVector32• StringCollection• StringDictionary• NameValueCollection

41

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa• BitArray− Là tập hợp có thể thay đổi kích thước

• Phải khai báo kích thước ban đầu• Không tự động thay đổi kích thước

− Hỗ trợ các thao tác cơ bản trên dữ liệu bit như• And• Or• Not• Xor

42

Xor

− Không hỗ trợ phương thức Add/ Remove

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitArray− Khi khởi tạo: giá trị mặc định các phần tử là falseKhi khởi tạo: giá trị mặc định các phần tử là false

− Chức năng mạnh nhất của BitArray là thực hiện các phép toán trên bit với 2 đối tượng BitArray có cùng p p g y gkích thước

43

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitVector32− Thích hợp cho việc xử lý các bit của một số lớnThích hợp cho việc xử lý các bit của một số lớn

• Dữ liệu dược lưu dưới dạng số nguyên 32 bit• Mọi xử lý trên BitVector32 sẽ thay đổi giá trị của số ọ ý y g ị

nguyên chứa trong nó• Lấy giá trị số nguyên thông qua thuộc tính Data

Khô thể th đổi kí h th ớ− Không thể thay đổi kích thước• Kích thước cố định : 32 bit

44

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitVector32 - Bit Mask− Cho phép tạo bit mask theo thứ tự tuần tự thông quaCho phép tạo bit mask theo thứ tự tuần tự thông qua

phương thức tĩnh CreateMask.

− Ví dụ: gán giá trị cho 4 bit đầu tiên của 1 số nguyên g g g y32 bit.

45

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitVector32 - Bit Mask− Tạo thể hiện BitVector32 BitVector32 v=new BitVector32(0);Tạo thể hiện BitVector32

− Tạo mask cho bit đầu tiên

BitVector32 v new BitVector32(0);

int fBit=BitVector32.CreateMask();

− Tạo bit mask thứ 2 với tham số là bit mask trước

int cBit=BitVector32.CreateMask(fBit);

trước

− Lặp lại bước trên cho tới khi tạo xong 4 bit mask

int tBit=BitVector32.CreateMask(cBit);

i f Bi Bi V 32 C M k( Bi )

46

int foBit=BitVector32.CreateMask(tBit);

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitVector32 - Bit Packing− Hỗ trợ gộp nhiều số nhỏ thành 1 số lớn:Hỗ trợ gộp nhiều số nhỏ thành 1 số lớn:

• Thường được dùng để giảm bộ nhớ lưu trữ khi xử lý các số nhỏ (rất nhỏ).

− Ví dụ : cần lưu 3 số nguyên• Số thứ nhất: max=10

ốCần 3 số

ê I t16Dùng 1

BitV t 32?• Số thứ hai: max=50• Số thứ ba: max=500

nguyên Int16 BitVector32?

47

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• BitVector32 - Bit Packing

BitVector32.Section fs = BitVector32.CreateSection(10);

BitVector32.Section ss = BitVector32 CreateSection(50 fs);

− Tạo section lưu số nguyên có kích thước xác định

BitVector32.CreateSection(50,fs);BitVector32.Section ts =

BitVector32.CreateSection(500,ss);BitVector32 pb = new BitVector32(0);thước xác định

− Gán giá trị cho các section

pb[fs] = 10;pb[ss] = 1;pb[ts] = 192;

− In kết quả Console.WriteLine(pb[fs]);Console.WriteLine(pb[ss]);Console.WriteLine(pb[ts]);

48

(p [ ]);Console.WriteLine(pb.Data);Console.WriteLine(pb);

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• CollectionString− Là một tập hợp độngLà một tập hợp động

− Chỉ lưu chuỗi ký tự

− Các chức năng tương tự như ArrayList− Các chức năng tương tự như ArrayListStringCollection coll=new StringCollection();coll.Add(“First”);coll.Add(“Second”);coll.Add(“Third”);String third=coll[2]; ?

49

g [ ];coll.Add(5);

?

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• StringDictionary− Là một phiên bản từ điển mạnhLà một phiên bản từ điển mạnh

− Sử dụng tương tự như HashTable• Key/value đều có kiểu StringKey/value đều có kiểu String

StringDictionary dict=new StringDictionary();dict[“First”]=“1st”;

dict[“Second”]=“2nd”;dict[“second”]=“second”;string second=dict[“Second”]; // 2nd

50

g [ ];

dict[4]=“4th”;?

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• NameValueCollection− Tương tự StringDictionaryTương tự StringDictionary

• Key/ value đều có kiểu String

− Đặc điểm:Đặc điểm:• Cho phép có nhiều value cho 1 key• Truy xuất value thông qua chỉ mục và key

− Thêm phần tử: phương thức Add

− Truy xuất phần tử: phương thức GetValues

51

y p p g

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• NameValueCollectionNameValueCollection nv=new NameValueCollection();nv.Add(“Key”,”Some Text”);nv.Add(“Key”,”More Text”);foreach (string s in nv.GetValues(“Key”)){( g ( y )){

Console.WriteLine(s);}

52

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• NameValueCollectionNameValueCollection nv = new NameValueCollection();();nv["First"]= "1st";nv["First"]= "First";nv.Add("Second", "2nd");nv.Add("Second", "Second");Console WriteLine("First length:"+nv GetValues("First") Length);Console.WriteLine( First length: +nv.GetValues( First ).Length);Console.WriteLine("Second length:"+nv.GetValues("Second").Length);

53

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Các Collection chuyên biệt hóa

• NameValueCollectionNameValueCollection nv = new NameValueCollection();();nv.Add(“First", “1st");nv.Add("Second", "2nd");nv.Add("Second", "Second");for (int i=0;i<nv.Count;i++){

Console WriteLine(nv[i]);Console.WriteLine(nv[i]);}

54

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Khái niệm• Các khai báo Generic• Các khai báo Generic

55

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Khái niệm− Generic là 1 phần trong hệ thống kiểu của NETGeneric là 1 phần trong hệ thống kiểu của .NET

Framework cho phép định kiểu mà không quan tâm nhiều đến các chi tiết bên trong.

ấ ề− .NET Framework cung cấp nhiều generic class trong namespace System.Collections.Generic• Hoạt động như những lớp khácHoạt động như những lớp khác• Tăng khả năng hiển thị và type-safety

56

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Các khai báo Generic− Tạo kiểu Generic

Kiểu T và U sẽ được xác định khi sử dụngTạo kiểu Generic

class Obj{public Object t;

class Gen<T,U>{public T t;public Object t;

public Object u;public Obj(Object _t,Object _u){

public T t;public U u;public Gen(T _t,U _u){

t=_t;u=_u;

}

t=_t;u=_u;

}Kiểu thông

thườngKiểu generic

57

}}

}}

thường

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Các khai báo Generic− Sử dụng kiểu GenericSử dụng kiểu Generic

• Chỉ định kiểu của kiểu generic sử dụng

Obj oa=new Obj(“Hello”,”World!”); Obj oa=new Obj(10.125,1000);j j( , );Console.WriteLine((string)oa.t+

(string)oa.u);Gen<string,string> ga=new

j j( , );Console.WriteLine((double)oa.t+

(int)oa.u);Gen<double,double> ga=newGen string,string ga new

Gen<string,string>(“Hello”,”world!”);

Console.WriteLine(ga.t+ga.u);

Gen double,double ga new Gen<double,int> (10.125,1000);

Console.WriteLine(ga.t+ga.u);

58

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Các khai báo GenericG <i t i t>Gen<int,int> gc=new

Gen<int,int>(10.125,1000);Console.WriteLine(ga.t+ga.u);

Compile ERROR

Obj oa=new Obj(10.125,1000);Console.WriteLine((int)oa.t+ Runtime

ERROR(int)oa.u); ERROR

59

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic

• Các khai báo Generic− Generic cũng có giới hạn khi ta xây dựng lớp hỗ trợ tấtGeneric cũng có giới hạn khi ta xây dựng lớp hỗ trợ tất

cả các kiểu dữ liệu• Giới hạn tương tự lớp Object

Giải há kh i bá á à b ộ i đị h á kiể− Giải pháp: khai báo các ràng buộc, qui định các kiểu có thể dùng với generic.

− Các ràng buộc mà generic hỗ trợg ộ g ợ• Interface• Base class

60

• Constructor• Reference/ value type

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic• Các khai báo Generic• Các khai báo Generic

class CompGen<T> where T : IComparable{public T t1;

CompGen<int> a = new CompGen<int>(10, 20);

public T t2;public CompGen(T _t1,T _t2){

t1=_t1;t2=_t2;

Console.WriteLine(a.Max());

}public T Max(){

if (t2.CompareTo(t1)<0)ể

(t Co pa e o(t ) 0)return t1;

return t2;}

Compile error : kiểu generic T không định nghĩa phương thức CompareTo

61

}}

CompareTo

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• Khái niệm• Giới thiệu các lớp Generic• Giới thiệu các lớp Generic

62

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• Khái niệm

63

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• Giới thiệu các lớp Generic− List<>

− Queue<>

− Stack<>Stack<>

− Dictionary<>

− SortedList<>SortedList<>

− SortedDictionary<>

− LinkedList<>

64

− LinkedList<>

− NameValuePair<>

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• List<>− Tạo danh sách có thứ tự với kiểu dữ liệu xác địnhạ ự ệ ị

− Khi tạo List, ta có thể:• Thêm phần tử vào danh sáchp• Truy xuất phần tử qua chỉ mục• Dùng cấu trúc foreach duyệt danh sách

65

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• List<>List<int> intList=new List<int>();List<int> intList=new List<int>();intList.Add(1);intList.Add(2);intList.Add(3);int number=intList[0];foreach (int i in intList){foreach (int i in intList){

Console.WriteLine(intList[i]);}

66

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• Queue<>− Là phiên bản type-safety của Queuep yp y Q

• Chỉ định kiểu dữ liệu khi khởi tạo• EnQueue: thêm phần tử với kiểu dữ liệu của Queue• DeQueue: lấy phần tử có kiểu của Queue

Queue<String> q=new Queue<String>();E Q (“H ll ”)q.EnQueue(“Hello”);

String qString=q.DeQueue();

67

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections

• Stack<>− Là phiên bản type-safety của Stackp yp y

• Chỉ định kiểu dữ liệu khi khởi tạo• Push: thêm phần tử với kiểu dữ liệu của Stack• Pop: lấy phần tử có kiểu của Stack

Stack<String> s=new Stack<String>();P h(“H ll ”)s.Push(“Hello”);

String sString=s.Pop();

68

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• Di ti• Dictionary<>− Có nhiều điểm tương đồng với HashTable,

ListDictionary và HybirdDictionaryListDictionary và HybirdDictionary

− Không giống với List<>, Queue<> và Stack<>,Dictionary<> lưu 1 cặp key/ value trong tập hợp.y ặp y g ập ợp• Khai báo 2 tham số generic khi khởi tạo

Dictionary<int,string> dict=new Dictionary<int,string>();dict[3]=“Three”;dict[4]=“Four”;dict[2]=“Two”;dict[1]=“One”;string str=dict[3];

69

string str=dict[3];Console.WriteLine(str);

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• Di ti• Dictionary<>− Duyệt các phần tử: dùng foreach với kiểu

KeyValuePair<>KeyValuePair<>• KeyValuePair<> nhận 2 tham số như của Dictionary<>

foreach (KeyValuePair<int,string> i int dict){Console.Write(“{0}= {1}”,i.Key,i.Value);

}}

70

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• S t dLi t• SortedList<>− Tương tự như Dictionary<>

− Các phần tử được sắp xếp theo tứ tự của keySortedList<string,int> sortList=new SortedList<string,int>();sortList[“Three”]=3;sortList[ Three ]=3;sortList[“One”]=1;sortList[“Two”]=2;foreach(KeyValuePair<string,int> i in sortList){

Console.WriteLine(i);}

71

}

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• S t dDi ti• SortedDictionary<>− Tương tự như Dictionary<>

− Các phần tử được sắp xếp theo tứ tự của keySortedDictionary<string,int> sortDict=new SortedDictionary<string,int>();sortDict[“Three”]=3;sortDict[ Three ]=3;sortDict[“One”]=1;sortDict[“Two”]=2;foreach(KeyValuePair<string,int> i in sortDict){

Console.WriteLine(i);}

72

}

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• Li k dLi t• LinkedList<>− Là kiểu tập hợp mới của .NET

− Là tập các phần tử, các phần tử có liên kết với nhau

− Với mỗi phần tử, có thể truy xuất phần tử trước và sau nó mà không cần truy xuất đến tập hợpnó mà không cần truy xuất đến tập hợp

− Chứa tập hợp các đối tượng LinkedListNode• Mỗi LinkedListNode là 1 phần tử của LinkedList• Mỗi LinkedListNode là 1 phần tử của LinkedList

73

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

Generic Collections• Li k dLi t

Generic Collections• Li k dLi t li k• LinkedList<>• LinkedList<>

X

links

FirstLinkedList<String> links=new LinkedList<String>();

LastSecond

ThirdLinkedListNode<String>

first=links.AddLast(“First”);LinkedListNode<String>

last=links.AddFirst(“Last”);

Third

ast s dd st( ast );LinkedListNode<String>

second=links.AddBefore(last,”Second”);

li k AddAft ( d ”Thi d”)foreach (string s in links){

Console.WriteLine(s);

links.AddAfter(second,”Third”);

74

}

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

TRUNG TÂM TIN HỌC

End

Thanks

75