C# cung cấp các lớp collection trong không gian tên System.Collections hay System.Collections.Generic, là các cấu trúc lưu trữ dữ liệu khác nhau.
ArrayList và List<T>
ArrayList là lớp thuộc không gian tên System.Collections, trong khi List<T> thuộc không gian tên System.Collections.Generic. ArrayList và List<T> đều cho phép tạo một dãy thứ tự các phần tử có kiểu dữ liệu bất kỳ, các phần tử này có thể có giá trị trùng nhau. Khác với mảng, ArrayList và List<T> có thể tự động thay đổi kích thước nếu cần thiết. Các phương thức, thuộc tính trên ArrayList tương tự List<T>.
- Khởi tạo một đối tượng kiểu ArrayList hay List<T>:
ArrayList list = new ArrayList();
List<KiểuDữLiệu> list = new List<KiểuDữLiệu>();
- Truy cập phần tử thứ i: list[i] với chỉ số i bắt đầu từ 0
- int Add(object value): bổ sung phần tử value, trả về vị trí phần tử thêm vào
- void Insert(int index, object value): chèn một phần tử value tại vị trí index
- void RemoveAt(int index): xóa phần tử tại vị trí index
- void Remove(object value): xóa phần tử value trong ArrayList
- void RemoveRange(int index, int count): xóa một dãy count phần tử kể từ vị trí index
- void Clear(): xóa tất cả các phần tử trong ArrayList
- bool Contains(object value): kiểm tra phần tử có trong ArrayList, nếu có trả về true
- void Sort(): sắp xếp các phần tử trong ArrayList
- int IndexOf(object value), int IndexOf(object value, int startIndex),
int IndexOf(object value, int startIndex, int count):
trả về chỉ số của phần tử value trong count phần tử của ArrayList, kể từ vị trí startIndex, nếu không tìm thấy trả về -1
- int BinarySearch(object value): tìm kiếm nhị phân trong danh sách đã sắp xếp
int BinarySearch(int startIndex, int count, object value)
- int Count: trả về số phần tử có trong ArrayList hay List<T>
- int Capacity: thiết lập hay trả về số phần tử có thể chứa trong ArrayList
- bool IsFixedSize: trả về giá trị chỉ rõ ArrayList có kích thước cố định hay không
Ví dụ:
using System;
using System.Collections;
class ViDu
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add(3);
list.Add(2);
list.Insert(1, 6);
list.Remove(3);
for (int i = 0; i < list.Count; i++)
Console.WriteLine(list[i].ToString());
}
}
Hashtable
Hashtable là lớp thuộc không gian tên System.Collections, biểu diễn một bảng băm, là danh sách các cặp phần tử và khóa liên kết phần tử này.
- Khởi tạo đối tượng Hashtable:
Hashtable h = new Hashtable();
- Truy cập phần tử thứ key: h[key]
- void Add(object key, object value): thêm một cặp phần tử value, khóa key vào Hashtable, mỗi phần tử tương ứng với khóa
- bool ContainsKey(object key) hay bool Contains(object key): kiểm tra khóa key có trong Hashtable chưa, nếu có phương thức trả về true
- bool ContainsValue(object value): kiểm tra phần tử có trong Hashtable chưa, nếu có phương thức trả về true
- void Remove(object key): xóa cặp khóa và phần tử tương ứng trong Hashtable
- ICollection Keys: trả về một ICollection chứa các khóa trong Hashtable
- ICollection Values: trả về một ICollection chứa các giá trị trong Hashtable
Ví dụ:
using System;
using System.Collections;
class ViDu
{
static void Main()
{
Hashtable weeks = new Hashtable();
weeks.Add("1", "Sunday");
weeks.Add("2", "Monday");
weeks.Add("3", "Tuesday");
Console.WriteLine(weeks["2"].ToString());
if (weeks.ContainsValue("Tuesday"))
Console.WriteLine( ("Tim thay");
else Console.WriteLine( ("Khong tim thay");
weeks.Remove("3");
foreach (DictionaryEntry day in weeks)
Console.WriteLine( (day.Key + " - " + day.Value);
}
}
SortedList và SortedList<T,T>
SortedList là lớp thuộc không gian tên System.Collections, trong khi SortedList<T,T> thuộc không gian tên System.Collections.Generic. SortedList và SortedList<T,T> biểu diễn một danh sách các cặp phần tử và khóa kết hợp phần tử này tương tự Hashtable, nhưng danh sách SortedList được sắp xếp theo khóa.
Mỗi cặp phần tử và khóa trong SortedList có kiểu struct KeyValuePair<TKey, TValue>, chứa thuộc tính Key trả về khóa và Value trả về giá trị của phần tử.
- Khởi tạo một đối tượng kiểu SortedList hay SortedList<T,T>:
SortedList list = new SortedList();
SortedList<TKey, TValue> list = new SortedList<TKey, TValue>();
- Truy cập phần tử thứ key: list[key]
- void Add(object key, object value): bổ sung phần tử value với khóa key
- void RemoveAt(int index): xóa phần tử tại vị trí index
- bool Remove(object key): xóa phần tử với khóa key
- int IndexOfValue(object value): tìm giá trị value, trả về vị trí tìm thấy, nếu không tìm thấy trả về -1
- int IndexOfKey(object key): tìm khóa key, trả về vị trí tìm thấy, nếu không tìm thấy trả về -1
- bool ContainsKey(object key): kiểm tra danh sách có chứa khóa key không, nếu có trả về true
- bool ContainsValue(object value): kiểm tra danh sách có chứa giá trị value không, nếu có trả về true
- bool TryGetValue(object key, out object value): trả về giá trị kết hợp với khóa key trong biến value, nếu tìm thấy trả về true
Ví dụ:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
SortedList<string, int> sorted = new SortedList<string, int>();
sorted.Add("Hoa", 9);
sorted.Add("Xuan", 7);
sorted.Add("Dong", 8);
bool contain1 = sorted.ContainsKey("Xuan");
Console.WriteLine("Danh sach co Xuan: " + contain1);
int value;
if (sorted.TryGetValue("Dong", out value))
Console.WriteLine("Gia tri co khoa Dong la " + value);
foreach (var pair in sorted)
Console.WriteLine(pair.Key +"-"+pair.Value);
int index = sorted.IndexOfValue(8);
Console.WriteLine("Vi tri cua diem 8: " + index);
}
}
Dictionary<T, T>
Dictionary là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một danh sách các cặp phần tử và khóa liên kết với phần tử này tương tự Hashtable. Kiểu dữ liệu của key và value có thể là bất kỳ kiểu cơ sở, string, mảng, kiểu liệt kê, hay struct. Mỗi cặp phần tử và khóa trong Dictionary có kiểu struct KeyValuePair<TKey, TValue>, chứa thuộc tính Key trả về khóa và Value trả về giá trị của phần tử.
- Khởi tạo đối tượng Dictionary
Dictionary<TKey, TValue> dict = new Dictionary<TKey, TValue>();
- Truy cập phần tử thứ key: dict[key]
- void Add(object key, object value): thêm một cặp phần tử value, khóa key vào Dictionary, mỗi phần tử tương ứng với khóa
- bool ContainsKey(object key): kiểm tra khóa có trong Dictionary chưa, nếu có phương thức trả về true
- bool ContainsValue(object value): kiểm tra phần tử có trong Dictionary chưa, nếu có phương thức trả về true
- bool Remove(object key): xóa cặp khóa và phần tử tương ứng, trả về true nếu tồn tại cặp khóa và phần tử, ngược lại trả về false
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
Dictionary<Color, string> colorStrings = new Dictionary<Color, string>();
colorStrings.Add(Color.Blue, Color.Blue.ToString());
colorStrings.Add(Color.Red, Color.Red.ToString());
foreach (KeyValuePair<Color, string> color in colorStrings)
Console.WriteLine(color.Key.GetBrightness().ToString()+ " " +
color.Value);
}
}
NameValueCollection
NameValueCollection là lớp thuộc không gian tên System.Collections.Specialized, biểu diễn một danh sách các cặp chuỗi và tên liên kết với chuỗi này tương tự Hashtable. Các chuỗi có thể truy cập bởi tên hay chỉ số. NameValueCollection có thể lưu nhiều chuỗi kết hợp với một tên.
- Khởi tạo đối tượng NameValueCollection:
NameValueCollection pair = new NameValueCollection();
- Truy cập phần tử với tên: pair[name]
hay truy cập phần tử thứ index: pair[index]
- void Add(string name, string value): thêm một cặp chuỗi value và tên name vào NameValueCollection
- void Remove(string name): xóa chuỗi tương ứng tên name
- string[] GetValues(int index): trả về một mảng các chuỗi tại vị trí index
- string Get(int index): trả về chuỗi chứa danh sách các chuỗi tại vị trí index cách nhau dấu phẩy
- string GetKey(int index): trả về tên liên kết với chuỗi tại vị trí index
- string[] AllKeys: trả về mảng tất cả các khóa trong danh sách
Ví dụ:
using System;
using System.Collections.Specialized;
class ViDu
{
static void Main()
{
NameValueCollection markStatus = new NameValueCollection();
markStatus.Add("High", "80");
markStatus.Add("High", "60");
markStatus.Add("Pass", "40");
foreach (string key in markStatus.Keys)
{
string[] values = markStatus.GetValues(key);
foreach (string value in values)
Console.WriteLine (key + " - " + value);
}
}
}
Stack và Stack<T>
Stack là lớp thuộc không gian tên System.Collections, trong khi Stack<T> thuộc không gian tên System.Collections.Generic. Lớp Stack và Stack<T> đều biểu diễn một ngăn xếp hoạt động theo nguyên tắc LIFO (Last In First Out), một phần tử thêm vào ngăn xếp cuối cùng, sẽ được lấy ra đầu tiên.
- Khởi tạo một đối tượng Stack
Stack stack = new Stack();
Stack<KiểuPhầnTử> stack = new Stack<KiểuPhầnTử>();
- void Push(object value): thêm một phần tử vào đỉnh ngăn xếp
- object Pop(): lấy một phần tử từ đỉnh ngăn xếp
- bool Contains(object value): kiểm tra giá trị có trong ngăn xếp không, nếu có trả về true
- object Peek(): trả về một phần tử ở đỉnh của ngăn xếp mà không xóa nó
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
Stack<string> days = new Stack<string>();
days.Push("Sunday");
days.Push("Monday");
days.Push("Tuesday");
days.Push("Wednesday");
days.Push("Thursday");
days.Push("Friday");
days.Push("Saturday");
if (days.Count == 7)
Console.WriteLine(days.Pop().ToString());
else Console.WriteLine("Saturday does not exist");
}
}
Queue và Queue<T>
Queue là lớp thuộc không gian tên System.Collections, trong khi Queue<T> thuộc không gian tên System.Collections.Generic. Lớp Queue và Queue<T> đều biểu diễn một hàng đợi hoạt động theo nguyên tắc FIFO (First In First Out), một phần tử thêm vào hàng đợi đầu tiên, sẽ được lấy ra đầu tiên.
- Khởi tạo một đối tượng Queue
Queue<KiểuPhầnTử> queue = new Queue<KiểuPhầnTử>();
- void Enqueue(object value): thêm một phần tử vào cuối hàng đợi
- object Dequeue(object value): lấy một phần tử ở đầu hàng đợi
- object Peek(): trả về phần tử ở đầu hàng đợi
- bool Contains(object value): kiểm tra giá trị có trong hàng đợi không, nếu có trả về true
LinkedList<T>
LinkedList là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một danh sách liên kết đôi, gồm danh sách các node liên kết với nhau bởi thành phần tham chiếu đến node kế tiếp và kế trước của mỗi node.
- Khởi tạo một đối tượng LinkedList
LinkedList<KiểuPhầnTử> list = new LinkedList<KiểuPhầnTử>();
- void AddAfter(LinkedListNode<T> node, int value): chèn node có giá trị value sau node chỉ rõ
- void AddAfter(LinkedListNode<T> node, LinkedListNode<T> newNode): chèn node mới newNode sau node chỉ rõ
- void AddBefore(LinkedListNode<T> node, int value): chèn node có giá trị value trước node chỉ rõ
- void AddBefore(LinkedListNode<T> node, LinkedListNode<T> newNode): chèn node mới newNode trước node chỉ rõ
- void AddFirst(int value): thêm node có giá trị value vào đầu danh sách
- void AddFirst(LinkedListNode<T> node): thêm node chỉ rõ vào đầu danh sách
- void AddLast(int value): thêm node có giá trị value vào cuối danh sách
- void AddLast(LinkedListNode<T> node): thêm node chỉ rõ vào cuối danh sách
- bool Contains(int value): kiểm tra giá trị có trong danh sách không
- LinkedListNode<T> Find(int value): tìm node đầu tiên trong danh sách có giá trị value
- LinkedListNode<T> FindLast(int value): tìm node cuối cùng trong danh sách có giá trị value
- bool Remove(int value): xóa node có giá trị value trong danh sách
- void Remove(LinkedListNode<T> node): xóa node chỉ rõ trong danh sách
- void RemoveFirst(): xóa node đầu tiên trong danh sách
- void RemoveLast(): xóa node cuối cùng trong danh sách
- LinkedListNode<T> Last: trả về node cuối danh sách
- LinkedListNode<T> First: trả về node đầu danh sách
- Mỗi node trong danh sách có kiểu LinkedListNode<T>, có các thuộc tính:
LinkedListNode<T> Next: trả về tham chiếu đến node kế tiếp
LinkedListNode<T> Previous: trả về tham chiếu đến node kế trước
T Value: trả về giá trị của node
Ví dụ:
using System;
using System.Collections.Generic;
class ViDu
{
static void Main()
{
LinkedList<int> list = new LinkedList<int>();
list.AddLast(2);
list.AddFirst(1);
LinkedListNode<int> node = list.First;
while (node != null)
{
Console.WriteLine(node.Value.ToString());
node = node.Next;
}
}
}
HashSet<T> và SortedSet<T>
HashSet là lớp thuộc không gian tên System.Collections.Generic, biểu diễn một tập hợp các phần tử không trùng nhau. .Net 4 bổ sung SortedSet<T> tương tự HashSet<T>, nhưng tập hợp được sắp xếp theo trật tự quy định bởi giao tiếp IComparer<T>.
- Khởi tạo một đối tượng HashSet
HashSet<KiểuPhầnTử> set = new HashSet<KiểuPhầnTử>();
Có thể khởi tạo một HashSet từ một Collection khác
string[] arr = { "cat", "dog", "cat", "leopard", "tiger", "cat" };
HashSet<string> hash = new HashSet<string>(arr);
Có thể khi khởi tạo HashSet, quy định cách thức so sánh phần tử trùng nhau
HashSet<string> hash = new HashSet<string>(new Compare());
Với Compare là lớp cài đặt giao tiếp IEqualityComparer<T>
- bool Add(object item): thêm một phần tử vào HashSet
- bool Remove(object item): xóa phần tử item từ HashSet
- bool Contains(object item): kiểm tra HashSet có chứa giá trị item, nếu có trả về true
- void CopyTo(object[] array): sao chép HashSet đến mảng array
Ví dụ:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
HashSet<string> hash = new HashSet<string>(new Compare());
hash.Add("1.Hoa");
hash.Add("2.Lan");
hash.Add("3.Thu");
string[] arr = new string[3];
hash.CopyTo(arr);
Console.WriteLine(string.Join(",", arr));
}
}
class Compare : IEqualityComparer<string>
{
public bool Equals(string a, string b)
{
if (GetHashCode(a) == GetHashCode(b))
return true;
return false;
}
public int GetHashCode(string a)
{
return int.Parse(a.Substring(0, a.IndexOf('.') ));
}
}
» Tin mới nhất:
» Các tin khác: