PHẦN 2: NỘI DUNG 1 Giới thiệu List 1.1 List là gì? List là một danh sách chứa các đối tượng (các nút (node) – lưu trữ các thông tin dữ liệu và địa chỉ của nút kế tiếp, nút trước đó) liên kết với nhau và cho phép chèn thêm hay xóa bất kì một đối tượng nào trong danh sách. Là một cấu trúc dữ liệu cơ bản để biết thêm tham khảo tại danh sách liên kết đơn. 1.2 Ưu và nhược điểm của List Việc sử dụng thành thạo các hàm trong “list” nói chung hoặc danh sách “list” nói riêng sẽ giúp ích rất nhiều về vấn đề quản lý, có thể là quản lý một danh sách thông tin nào đó, với các hàm đã được hỗ trợ viết sẵn sẽ giúp dễ dàng cập nhật và sửa chữa. List hỗ trợ vòng lặp 2 chiều, nhưng lại không thể truy cập ngẫu nhiên như các mảng thông thường vì vậy mà việc tìm kiếm một phần tử trong danh sách sẽ rất chậm, lí do từ việc cấu trúc của List được xây dựng tương tự danh sách liên kết đơn. 1.3 Các thao tác trên List List là một trong những kiểu dữ liệu cơ bản trong C, chứa các phần tử của cùng loại và có thể được thao tác một cách dễ dàng. Dưới đây là một số thao tác phổ biến của List: • Add() – Thêm một phần tử vào cuối List • Insert() – Thêm một phần tử mới vào List ở vị trí bất kỳ • Remove() – Xóa một phần tử khỏi List • RemoveAt() – Xóa phần tử ở vị trí bất kỳ khỏi List • Clear() – Xóa toàn bộ phần tử khỏi List • Contains() – Kiểm tra xem phần tử có tồn tại trong List hay không • IndexOf() – Trả về vị trí đầu tiên của phần tử trong List • Count – Trả về số lượng phần tử trong List • Sort() – Sắp xếp một List theo thứ tự được chỉ định (tăng dần hoặc giảm dần) • Reverse() – Đảo ngược thứ tự các phần tử trong List Với các phương thức này, người lập trình có thể tùy chỉnh List theo yêu cầu của mình và thực hiện các tác vụ liên quan đến dữ liệu một cách dễ dàng.
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
TIỂU LUẬN:
NHÓM 7
Thành Phố Hồ Chí Minh, ngày , tháng , năm 2023
BỘ CÔNG THƯƠNG
Đề Tài 15: TÌM
HIỂU LIST,
ARRAYLIST
TRONG C#
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN:
Thành Phố Hồ Chí Minh, ngày , tháng , năm 2023
Lời Cam Đoan
Em/Chúng em xin cam đoan đề tài tiểu luận TÌM HIỂU LIST, ARRAYLIST TRONG C# do cá nhân/nhóm 7 nghiên cứu và thực hiện.
ĐỀ TÀI 15:
TÌM HIỂU
LIST,
ARRAYLIST
TRONG C#
Nhóm:
Trưởng nhóm: Vũ Đình Đăng Khoa-2001222099
Thành viên:
1 Dương Tấn Lên-2001222239
2 Nguyễn Hải Đăng-2001220959
3 Bùi Tấn Đạt-2001220879
4 Huỳnh Hoàng Sơn-2001224188
Giảng viên hướng dẫn:
Trần Văn Thọ
Trang 3Em/ chúng em đã kiểm tra dữ liệu theo quy định hiện hành.
Kết quả làm bài của đề TÌM HIỂU LIST, ARRAYLIST TRONG C là
trung thực không sao chép từ bất kì bài tập nào của nhóm khác
Các tài liệu được sử dụng trong tiểu luận có nguồn gốc, xuất xứ rõ ràng
(Ký và ghi rõ họ tên)
MỤC LỤC
PHẦN 1: PHẦN MỞ ĐẦU 5
Trang 4PHẦN 2: NỘI DUNG 6
1 Giới thiệu List 6
1.1 List là gì? 6
1.2 Ưu và nhược điểm của List 6
1.3 Các thao tác trên List 6
1.4 Cấu tạo của List 7
1.5 Cơ chế hoạt động của List 7
1.6 Khởi tạo List 8
1.7 Thêm và xóa phần tử của List 8
1.8 Tìm kiếm thông tin trong List 9
1.9 Duyệt các phần tử trong List 9
2 Giới thiệu về array list 11
2.1 Array List là gì? 11
2.2 Ưu và nhược điểm của Array List 11
2.3 Các thao tác trên Array List 11
2.4 Cấu tạo của ArrayList 12
2.5 Cơ chế hoạt động của ArrayList 12
2.6 Khởi tạo ArrayList 13
2.7 Thêm và xóa phần tử của ArrayList 14
2.8 Tìm kiếm thông tin trong ArrayList 14
2.9 Duyệt các phần tử trong ArrayList 15
PHẦN 3: KẾT LUẬN CHUNG 16
BIÊN BẢN NHÓM 17
PHẦN 1: PHẦN MỞ ĐẦU
Cùng với sự phát triển của khoa học, kỹ thuật, công nghệ thông tin ở nước ta trong những năm gần đây phát triển mạng thì ngành công nghệ thông tin cũng là
Trang 5ngành thu hút rất nhiều học sinh cho các trường đại học Khi bắt đầu với ngành công nghệ thông tin chúng ta sẽ được tìm hiểu về ngôn ngữ lập trình rất cơ bản đó
là C,C++,C# và đây cũng là cũng là những học phần mà các sinh viên HUFI được học khi học ngành công nghệ thông tin của trường Đại Học Công Nghiệp Thực Phẩm Học phần cung cấp cho sinh viên những kiến thức cơ bản và chuyên sâu về List và ArrayList
Mục tiêu:
- Tìm hiểu cấu trúc dữ liệu và cách vận hành của List và ArrayList
- Phát huy khả năng tự tìm kiến, đọc tài liệu của sinh viên
- Sinh viên học cách tự khái quát, trừu tượng kiến thức mới dựa trên nền kiến thức cũ
- Biết cách viết một bài tìm hiểu, bài nghiên cứu ở mức đơn giản
- Cải thiện khả năng thuyết trình của sinh viên
- Học cách làm việc nhóm
Trang 6PHẦN 2: NỘI DUNG
1 Giới thiệu List
1.1 List là gì?
List là một danh sách chứa các đối tượng (các nút (node) – lưu trữ các thông tin dữ liệu và địa chỉ của nút kế tiếp, nút trước đó) liên kết với nhau và cho phép chèn thêm hay xóa bất kì một đối tượng nào trong danh sách Là một cấu trúc dữ liệu cơ bản để biết thêm tham khảo tại danh sách liên kết đơn
1.2 Ưu và nhược điểm của List
Việc sử dụng thành thạo các hàm trong “list” nói chung hoặc danh sách
“list” nói riêng sẽ giúp ích rất nhiều về vấn đề quản lý, có thể là quản lý một danh sách thông tin nào đó, với các hàm đã được hỗ trợ viết sẵn sẽ giúp dễ dàng cập nhật và sửa chữa List hỗ trợ vòng lặp 2 chiều, nhưng lại không thể truy cập ngẫu nhiên như các mảng thông thường vì vậy mà việc tìm kiếm một phần tử trong danh sách sẽ rất chậm, lí do từ việc cấu trúc của List được xây dựng tương tự danh sách liên kết đơn
1.3 Các thao tác trên List
List là một trong những kiểu dữ liệu cơ bản trong C#, chứa các phần tử của cùng loại và có thể được thao tác một cách dễ dàng Dưới đây là một số thao tác phổ biến của List:
Add() – Thêm một phần tử vào cuối List
Insert() – Thêm một phần tử mới vào List ở vị trí bất kỳ
Remove() – Xóa một phần tử khỏi List
RemoveAt() – Xóa phần tử ở vị trí bất kỳ khỏi List
Clear() – Xóa toàn bộ phần tử khỏi List
Contains() – Kiểm tra xem phần tử có tồn tại trong List hay không
IndexOf() – Trả về vị trí đầu tiên của phần tử trong List
Count – Trả về số lượng phần tử trong List
Sort() – Sắp xếp một List theo thứ tự được chỉ định (tăng dần hoặc giảm dần)
Reverse() – Đảo ngược thứ tự các phần tử trong List
Với các phương thức này, người lập trình có thể tùy chỉnh List theo yêu cầu của mình và thực hiện các tác vụ liên quan đến dữ liệu một cách dễ dàng
Trang 71.4 Cấu tạo của List
Trong C#, List là một kiểu dữ liệu được sử dụng để lưu trữ các phần tử có cùng loại dữ liệu List được sử dụng rộng rãi để lưu trữ và quản lý dữ liệu, cho phép thêm, sửa, xóa và tìm kiếm các phần tử trong danh sách
Cấu trúc của List gồm các thành phần sau:
Dữ liệu: List lưu trữ các phần tử trong danh sách, các phần tử này có thể có cùng hoặc khác kiểu dữ liệu
Size: List được cấp phát một kích thước nào đó để lưu trữ các phần tử Khi danh sách đầy, các phần tử mới sẽ không thể được thêm vào
Count: List ghi nhận số phần tử hiện có trong danh sách
Index: List lưu trữ các phần tử theo thứ tự và cho phép truy xuất các phần tử theo chỉ số
Capacity: dung lượng của List
Method: List bao gồm các phương thức để thêm, sửa, xóa và tìm kiếm các phần tử trong danh sách
List trong C# sử dụng dynamic array để lưu trữ và cung cấp một số phương thức để quản lý cái động này Vì vậy, khi List quá tải dung lượng của nó, chương trình sẽ tự động tăng dung lượng List một cách động để có thể lưu thêm dữ liệu
1.5 Cơ chế hoạt động của List
List trong C# là một cấu trúc dữ liệu linh hoạt cho phép lưu trữ một tập hợp các đối tượng có thể được truy cập theo vị trí Cơ chế hoạt động của List được xây dựng dựa trên một mảng động, trong đó các phần tử được lưu trữ liên tiếp nhau trong vùng nhớ máy tính
Khi thêm một phần tử vào List, nếu List đã đầy, một mảng mới được tạo ra
và các phần tử của List được sao chép vào mảng mới này và phần tử mới được thêm vào mảng mới này Các phần tử trong List được lưu trữ theo thứ tự và có thể được truy cập bằng cách sử dụng chỉ số Chỉ số của phần tử đầu tiên trong List là 0
và chỉ số của phần tử cuối cùng là số phần tử trong List trừ 1
Ngoài ra, List cũng cung cấp các phương thức để thêm, xóa, tìm kiếm và truy xuất danh sách các phần tử Các phương thức này được cung cấp để cung cấp tính linh hoạt cho việc thao tác với List, giúp người lập trình dễ dàng truy cập và
sử dụng các phần tử trong List một cách hiệu quả
Trang 81.6 Khởi tạo List
Các khởi tạo List bao gồm:
Khởi tạo trống: List name = new List();
Khởi tạo với số lượng phần tử cố định: List name = new List(capacity);
Khởi tạo và thêm các phần tử vào List: List name = new List { item1, item2, };
Khởi tạo bằng cách sao chép các phần tử từ một collection khác: List name
= new List(collection);
Trong C#, để khởi tạo danh sách (List), bạn có thể sử dụng cú pháp sau:
List danhSach = new List();
Trong đó, T là kiểu phần tử của danh sách được chỉ định trước khi khởi tạo Ví dụ, nếu bạn muốn khởi tạo danh sách các chuỗi, bạn có thể sử dụng:
List danhSach = new List();
Sau khi khởi tạo, bạn có thể thêm các phần tử vào danh sách bằng cách sử dụng phương thức Add(), ví dụ:
danhSach.Add("phần tử 1"); danhSach.Add("phần tử 2"); danhSach.Add("phần tử 3");
Bạn cũng có thể khởi tạo danh sách với các phần tử ban đầu bằng cách chuyền một mảng các phần tử vào phương thức khởi tạo, ví dụ:
string[] mangPhanTu = new string[] { "phần tử 1", "phần tử 2", "phần tử 3" };
List danhSach = new List(mangPhanTu);
1.7 Thêm và xóa phần tử của List
*Cở chế của thao tác thêm phân tử trong List trong ngôn ngữ lập trình C#:
- List là một kiểu dữ liệu tổng quát (generic) có thể chứa các phần tử có cùng kiểu dữ liệu
- List sử dụng một mảng động (dynamic array) để lưu trữ các phần tử của
nó - Khi thêm một phần tử vào List, nếu mảng động còn đủ không gian, phần tử
sẽ được thêm vào vị trí cuối cùng của mảng và kích thước của List tăng lên 1
- Nếu mảng động đã đầy, List sẽ tạo ra một mảng mới có kích thước lớn hơn và sao chép tất cả các phần tử từ mảng cũ sang mảng mới Sau đó, phần tử
Trang 9mới sẽ được thêm vào vị trí cuối cùng của mảng mới và kích thước của List tăng lên 1
- Thao tác thêm phần tử vào List có độ phức tạp trung bình là O(1), nhưng
có thể lên đến O(n) trong trường hợp phải tạo mảng mới và sao chép các phần tử
*Trong ngôn ngữ lập trình C#, phương thức Remove và RemoveAt của lớp List<T> được sử dụng để xóa phần tử trong List
Phương thức Remove sẽ xóa phần tử đầu tiên trong List có giá trị bằng với giá trị được chỉ định
Phương thức RemoveAt sẽ xóa phần tử tại chỉ số được chỉ định
1.8 Tìm kiếm thông tin trong List
-Có nhiều cách để tìm kiếm một phần tử trong List trên C# Bạn có thể sử dụng phương thức Find của lớp List để tìm kiếm một phần tử duy nhất trong danh sách Phương thức Find nhận một đối số là một biểu thức lambda để lọc/tìm kiếm danh sách cho một phần tử duy nhất Nếu bạn cần tìm nhiều hơn một phần tử, bạn
có thể sử dụng phương thức FindAll
Ví dụ:
List<CompareDesignGroup> list = // ;
CompareDesignGroup item = list.Find(c => c.FieldId == "SomeFieldId");
1.9 Duyệt các phần tử trong List
-Có nhiều cách để duyệt qua các phần tử trong List trên C# Một cách phổ biến là sử dụng vòng lặp foreach để duyệt qua từng phần tử trong danh sách
Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
foreach (int number in numbers) {
Console.WriteLine(number);}
Trong đó number sẽ lần lượt nhận giá trị của từng phần tử trong danh sách numbers và được in ra màn hình
Ngoài ra, bạn cũng có thể sử dụng vòng lặp for để duyệt qua từng phần tử trong danh sách bằng cách sử dụng chỉ số của chúng
Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Count; i++)
Trang 10{ Console.WriteLine(numbers[i]);
}
Trong đó numbers[i] sẽ lần lượt nhận giá trị của từng phần tử trong danh sách numbers và được in ra màn hình
2 Giới thiệu về array list
2.1 Array List là gì?
Là một Collections giúp lưu trữ và quản lý một danh sách các đối tượng theo
kiểu mảng (truy cập các phần tử bên trong thông qua chỉ số index).
Trang 11Rất giống mảng các object nhưng có thể thêm hoặc xoá các phần tử một cách linh hoạt và có thể tự điều chỉnh kích cỡ một cách tự động
2.2 Ưu và nhược điểm của Array List
Ưu điểm:
Cho phép lưu trữ các phần tử có thể thêm hoặc xóa linh hoạt
Dễ dàng truy cập vào các phần tử bên trong của ArrayList vì nó dựa trên chỉ số
ArrayList có khả năng thực hiện nhanh các thao tác cơ bản như thêm, sửa, xóa phần tử
Nó có khả năng tự động mở rộng kích thước để chứa các phần tử mới
Nhược điểm:
ArrayList được cấp phát bộ nhớ liên tục và không thể phân mảnh, điều này
có nghĩa là việc thêm xoá các phần tử có thể dẫn đến tình trạng lãng phí bộ nhớ hoặc yêu cầu công sức để di chuyển các phần tử khác
Tìm kiếm các phần tử trong ArrayList sử dụng phương thức indexOf() có thể rất chậm nếu ArrayList chứa hàng trăm nghìn phần tử hoặc nhiều hơn
ArrayList chỉ có thể lưu trữ các đối tượng, và không thể lưu trữ các kiểu dữ liệu nguyên thủy như số nguyên, số thực, v.v
2.3 Các thao tác trên Array List
Arraylist là một kiểu dữ liệu trong C#, cho phép lưu trữ một tập hợp các phần tử Các thao tác của ArrayList được gọi là các phương thức, bao gồm:
Add(): Thêm một phần tử vào cuối danh sách
Insert(): Thêm một phần tử vào danh sách ở vị trí được chỉ định
Remove(): Xóa một phần tử khỏi danh sách
RemoveAt(): Xóa phần tử ở vị trí được chỉ định khỏi danh sách
Clear(): Xóa tất cả các phần tử khỏi danh sách
Contains(): Kiểm tra xem một phần tử có tồn tại trong danh sách hay không
IndexOf(): Trả về vị trí của phần tử đầu tiên có trong danh sách
Count: Trả về số lượng phần tử hiện có trong danh sách
Sort: Sắp xếp các phần tử của danh sách theo thứ tự tăng dần hoặc giảm dần
TrimToSize: Giảm kích thước của danh sách để chỉ còn chứa đúng số phần
tử hiện có
ToArray: Chuyển đổi danh sách ArrayList sang một mảng
Trang 12 AddRange: Thêm tất cả các phần tử trong một danh sách được chỉ định vào cuối danh sách
InsertRange: Thêm tất cả các phần tử trong một danh sách được chỉ định vào
vị trí được chỉ định trong danh sách
RemoveRange: Xóa tất cả các phần tử trong một khoảng của danh sách được chỉ định
ToArray: Trả về một mảng đã chuyển đổi từ ArrayList
Các thao tác này giúp cho việc quản lý dữ liệu trong ArrayList trở nên dễ dàng và hiệu quả hơn
2.4 Cấu tạo của ArrayList
ArrayList trong C# là một cấu trúc dữ liệu con trỏ động, tức là được sử dụng
để lưu trữ các đối tượng có thể thay đổi kích thước
ArrayList bao gồm hai thành phần chính:
Mảng (array): Mảng trong ArrayList có thể được tạo ra bằng cách sử dụng một mảng tĩnh Nếu mảng đầy, ArrayList sẽ tạo một mảng mới với kích thước lớn hơn
Con trỏ (Pointer): Con trỏ trong ArrayList giữ thông tin về số lượng phần tử trong ArrayList, kích thước của mảng và vị trí của phần tử đầu tiên trong mảng
Để sử dụng ArrayList trong C#, ta phải khai báo đối tượng ArrayList và thực hiện các hoạt động như thêm phần tử, xoá phần tử, truy xuất phần tử,
2.5 Cơ chế hoạt động của ArrayList
Trong C#, ArrayList là một lớp dữ liệu động được sử dụng để lưu trữ tập hợp các phần tử đối tượng, giống như một mảng động ArrayList được sử dụng để thêm, xóa và truy xuất các phần tử trong danh sách Các phần tử trong danh sách
có thể là bất kỳ loại đối tượng nào, bao gồm các đối tượng được xác định bởi người dùng
ArrayList được lập chỉ mục bằng cách sử dụng số nguyên để truy cập trực tiếp các phần tử trong danh sách Mỗi phần tử trong ArrayList được lưu trữ dưới dạng đối tượng, do đó, đối tượng cần phải được chuyển đổi sang kiểu phù hợp trước khi sử dụng
Cách hoạt động của ArrayList được thực hiện thông qua các phương thức và thuộc tính của nó Các phương thức này bao gồm Add, Insert, Remove, Clear, Sort,
Trang 13BinarySearch, Contains, Count, và IndexOf Các thuộc tính bao gồm Capacity, Count, và Item
Khi tạo một ArrayList, nó được khởi tạo một mảng động có dung lượng khởi tạo ban đầu, và sau đó cung cấp cho phương thức Add() để thêm phần tử vào danh sách Khi danh sách tràn dung lượng cung cấp, một bản sao của nó sẽ được tạo ra
và dung lượng vùng nhớ được cấp phát cho nó sẽ tăng gấp đôi
Tuy nhiên, sử dụng ArrayList cũng có một số hạn chế Các phần tử trong ArrayList phải được chuyển đổi sang kiểu phù hợp trước khi sử dụng, điều này sẽ gây mất thời gian xử lý và tăng chi phí cho việc thực hiện Hơn nữa, vì ArrayList
là một lớp đối tượng thay vì một kiểu giá trị, do đó, nó có thể chịu ảnh hưởng lớn đến hiệu suất tổng thể của ứng dụng của bạn
Trong C#, bạn cũng có thể sử dụng các lớp dữ liệu khác như List, LinkedList, Stack, và Queue để lưu trữ và quản lý các phần tử trong danh sách Tùy thuộc vào nhu cầu của bạn, bạn có thể chọn lớp dữ liệu phù hợp nhất để sử dụng trong ứng dụng của mình để đạt được hiệu suất tối ưu
2.6 Khởi tạo ArrayList
Trong C#, để khởi tạo một ArrayList, bạn có thể sử dụng cú pháp:
using System.Collections;
ArrayList myArrayList = new ArrayList();
Cách này sẽ khởi tạo một ArrayList rỗng
Bạn cũng có thể khởi tạo một ArrayList có sẵn các phần tử bằng cách truyền vào một mảng các giá trị:
using System.Collections;
ArrayList myArrayList = new ArrayList(new object[] {"hello",
123, true});
Cú pháp này sẽ tạo ra một ArrayList chứa 3 phần tử, lần lượt là chuỗi
"hello", số nguyên 123 và giá trị boolean true
2.7 Thêm và xóa phần tử của ArrayList
-Để thêm một phần tử váo Arraylist trong ngôn ngữ c#, bạn có thể sử dụng phương thức Add() để thêm một đối tượng vào phần cuối của ArrayList hoặc sử