Khái niệm
Tập hợp phần tử là nhóm cấu trúc dữ liệu dùng để lưu nhiều giá trị theo một quy tắc tổ chức nhất định. Tùy ngữ cảnh, tập hợp có thể cho phép thay đổi kích thước, cho phép phần tử trùng lặp hoặc giữ thứ tự chèn.
Ví dụ với cấu trúc danh sách linh hoạt
numbers = [1, 2, 3]
numbers.append(4)
print(numbers)
using System;
using System.Collections.Generic;
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Add(4);
Console.WriteLine(string.Join(", ", numbers));
const numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers);
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {1, 2, 3};
numbers.push_back(4);
for (int n : numbers) cout << n << " ";
return 0;
}
const numbers: number[] = [1, 2, 3];
numbers.push(4);
console.log(numbers);
package main
import "fmt"
func main() {
numbers := []int{1, 2, 3}
numbers = append(numbers, 4)
fmt.Println(numbers)
}
fn main() {
let mut numbers = vec![1, 2, 3];
numbers.push(4);
println!("{:?}", numbers);
}
Phân biệt nhanh
- Danh sách thường giữ thứ tự và cho phép truy cập theo chỉ số.
- Tập hợp kiểu
setnhấn mạnh tính duy nhất của phần tử. - Ngăn xếp và hàng đợi tập trung vào quy tắc thêm, lấy phần tử.
Ghi chú theo ngôn ngữ
Python có bộ sưu tập tích hợp: list (co giãn), tuple (bất biến), set (không trùng lặp), dict (cặp khóa-giá trị). Tất cả có cú pháp ngắn gọn và các phương thức phong phú.
Pascal có kiểu set cho miền giá trị rời rạc và các cấu trúc khác thường được mô phỏng bằng mảng hoặc thư viện bổ sung. Mức độ phong phú phụ thuộc vào trình biên dịch và thư viện đi kèm.
C không có cấu trúc tập hợp động sẵn trong thư viện chuẩn. Khi cần danh sách, ngăn xếp hoặc hàng đợi, người viết thường phải tự cài đặt hoặc dùng thư viện ngoài.
C++ có std::vector, std::list, std::deque, std::set… cho các kịch bản khác nhau. std::vector là lựa chọn mặc định cho danh sách động.
C# có List<T> cho danh sách linh hoạt, Dictionary<K,V> cho ánh xạ, HashSet<T> cho tập hợp duy nhất và nhiều hơn trong System.Collections.Generic.
JavaScript có Array (linh hoạt), Map (cặp khóa-giá trị) và Set (tập hợp duy nhất) từ ES6. Map ưu việt hơn plain object khi khóa không phải là chuỗi.
TypeScript dùng Array<T> hay T[] cho danh sách. Set<T> và Map<K, V> là các kiểu tập hợp có generic type hỗ trợ kiểm tra kiểu tịnh.
Go dùng slice ([]T) làm cấu trúc danh sách linh hoạt chính. Không có Set riêng; thường mô phỏng bằng map[T]struct{}.
Rust có Vec<T> cho danh sách, HashSet<T> cho tập hợp duy nhất và VecDeque<T> cho hàng đợi. Tất cả đều thuộc std::collections.
Bình luận