Jacobvu84 / developer-career

Study for interview
1 stars 0 forks source link

Các loại collection trong java #21

Open Jacobvu84 opened 2 months ago

Jacobvu84 commented 2 months ago

Trong Java, các collection (bộ sưu tập) cung cấp một cách để lưu trữ và quản lý nhóm các đối tượng. Dưới đây là các loại chính trong framework Java Collections:

1. List (Danh sách)

2. Set (Tập hợp)

3. Queue (Hàng đợi)

4. Deque (Hàng đợi hai đầu)

5. Map (Bản đồ)

6. Collections Đặc biệt khác

Mỗi loại collection đều có đặc điểm và trường hợp sử dụng riêng, tùy thuộc vào yêu cầu về hiệu suất và cách xử lý dữ liệu.

Jacobvu84 commented 2 months ago

Ngoài các loại collection đã đề cập, trong Java còn một số loại khác và các biến thể của chúng mà bạn có thể gặp phải. Dưới đây là một số collection đặc biệt khác trong Java:

  1. SortedSet

SortedSet là một giao diện con của Set, cung cấp các phương thức để duyệt qua các phần tử theo thứ tự.

TreeSet là một ví dụ điển hình của SortedSet. Nó sắp xếp các phần tử theo thứ tự tự nhiên hoặc dựa trên một bộ so sánh (Comparator) tùy chỉnh.

  1. NavigableSet

NavigableSet mở rộng từ SortedSet và cung cấp các phương thức bổ sung để điều hướng qua các phần tử dựa trên khóa.

TreeSet cũng là một triển khai của NavigableSet. Ngoài việc sắp xếp, nó còn cung cấp các phương thức để tìm các phần tử gần nhất nhỏ hơn hoặc lớn hơn một giá trị nhất định.

  1. SortedMap

SortedMap là một giao diện con của Map, cung cấp các phương thức để sắp xếp các cặp khóa-giá trị theo thứ tự khóa.

TreeMap là một ví dụ của SortedMap, nơi các cặp khóa-giá trị được sắp xếp tự động theo thứ tự khóa.

  1. NavigableMap

NavigableMap mở rộng từ SortedMap và cung cấp các phương thức để điều hướng qua các cặp khóa-giá trị theo thứ tự khóa.

TreeMap cũng triển khai NavigableMap, cho phép tìm kiếm các khóa gần nhất và hỗ trợ các thao tác như trả về một phần của bản đồ (subMap, headMap, tailMap).

  1. BlockingQueue

BlockingQueue là một loại Queue đặc biệt hỗ trợ hoạt động đồng bộ giữa các luồng, trong đó một luồng có thể đợi (blocking) để chèn hoặc lấy phần tử khi cần thiết.

Các triển khai của BlockingQueue:

ArrayBlockingQueue: Hàng đợi kích thước cố định dựa trên mảng.

LinkedBlockingQueue: Hàng đợi có thể có kích thước cố định hoặc động.

PriorityBlockingQueue: Hàng đợi ưu tiên, có thể được chia sẻ giữa các luồng.

DelayQueue: Hàng đợi các phần tử được lấy ra sau một khoảng thời gian trễ nhất định.

  1. TransferQueue

TransferQueue mở rộng từ BlockingQueue và cung cấp thêm phương thức để chuyển giao trực tiếp phần tử giữa các nhà sản xuất và người tiêu dùng. Người tiêu dùng phải lấy phần tử trước khi nhà sản xuất thêm một phần tử mới.

LinkedTransferQueue là một ví dụ của TransferQueue.

  1. Concurrent Collections

ConcurrentHashMap: Một phiên bản thread-safe của HashMap, cho phép nhiều luồng đọc ghi mà không cần khóa toàn bộ bảng băm.

ConcurrentLinkedQueue: Hàng đợi không chặn, thread-safe, phù hợp với nhiều luồng.

CopyOnWriteArrayList: Danh sách đồng bộ hóa, trong đó mỗi lần thay đổi (thêm, xóa) sẽ tạo một bản sao mới của danh sách.

CopyOnWriteArraySet: Một triển khai đồng bộ hóa của Set, tương tự như CopyOnWriteArrayList nhưng không cho phép các phần tử trùng lặp.

  1. Deque (Double-ended queue)

Deque là một loại Queue cho phép thêm và loại bỏ phần tử từ cả hai đầu của hàng đợi.

Các triển khai của Deque:

ArrayDeque: Hàng đợi hai đầu dựa trên mảng.

LinkedList: Cũng có thể được sử dụng làm hàng đợi hai đầu.

  1. Synchronized Collections

Collections.synchronizedList(): Tạo ra một danh sách được đồng bộ hóa (thread-safe).

Collections.synchronizedSet(): Tạo ra một tập hợp được đồng bộ hóa.

Collections.synchronizedMap(): Tạo ra một bản đồ được đồng bộ hóa.

  1. IdentityHashMap

IdentityHashMap là một biến thể của HashMap, trong đó so sánh các khóa dựa trên tham chiếu đối tượng (==) thay vì dựa trên phương thức equals().

  1. WeakHashMap

WeakHashMap sử dụng các khóa yếu (weak references) cho các mục, giúp tự động loại bỏ các khóa không còn được tham chiếu bởi bất kỳ đối tượng nào khác. Điều này rất hữu ích khi cần quản lý bộ nhớ.

  1. EnumSet

EnumSet là một Set đặc biệt dành riêng cho các kiểu enum. Nó cung cấp hiệu suất rất cao vì các phần tử của nó được lưu trữ dưới dạng bit.

  1. BitSet

BitSet là một tập hợp các bit hoặc các giá trị boolean, trong đó mỗi phần tử trong tập hợp chỉ có hai trạng thái: true hoặc false. Nó thường được sử dụng để làm việc với các dãy số nhị phân.

Tổng kết:

Framework Java Collections rất đa dạng, cung cấp nhiều loại collection để xử lý các trường hợp sử dụng khác nhau. Từ việc lưu trữ danh sách, tập hợp, hàng đợi cho đến bản đồ, Java còn có nhiều lớp đặc biệt để hỗ trợ quản lý dữ liệu đồng bộ và không đồng bộ. Việc chọn lựa đúng loại collection phụ thuộc vào yêu cầu của bài toán về hiệu suất, bộ nhớ và quản lý đồng bộ (thread safety).