Skip to content

Collection trong java

Collection vs Collections

Collection: Collection là một interface có trong gói java.util. Nó được sử dụng để biểu diễn một nhóm các đối tượng riêng lẻ dưới dạng một đơn vị. Nó tương tự như vùng chứa trong ngôn ngữ C++. Collection được coi là root interface trong hệ thống cấp bật Collection. Nó cung cấp một số class và interface để biểu diễn một nhóm đối tượng riêng lẻ dưới dạng một đơn vị.

Java Collection cung cấp nhiều interface (Set, List, Queue, Deque vv) và các lớp (ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet vv). Add(), delete(), clear(), size() và contains() là các phương thức quan trọng của Collection.

Collections: Collections là một class tiện ích có trong gói java.util. Nó định nghĩa một số phương thức tiện ích như sắp xếp và tìm kiếm được sử dụng để vận hành trên Collection. Nó có tất cả các phương thức tĩnh. Những phương pháp này mang lại sự tiện lợi rất cần thiết cho các nhà phát triển, cho phép họ làm việc hiệu quả với Collection Framework. Ví dụ: Nó có phương thức Sort() để sắp xếp các phần tử của bộ sưu tập theo thứ tự sắp xếp mặc định và nó có phương thức min() và max() để tìm giá trị tối thiểu và tối đa tương ứng trong các phần tử của collection.

Hệ thống cấp bật Collection trong Java

Gói java.util chứa tất cả các class và interface của Collection.

Những interface chính của Collection

  • List: là một collection có thứ tự (đôi khi còn được gọi là một chuỗi). List có thể chứa các phần tử trùng lặp. Thường có quyền kiểm soát chính xác vị trí các phần tử được chèn vào và có thể truy cập chúng bằng chỉ số (vị trí của chúng).
  • Set: là một collection không thể chứa 2 giá trị trùng lặp. Set được sử dụng để biểu diễn các bộ, chẳng hạn như bộ tú lu khơ, thời khóa biểu của học sinh, các tiến trình đang chạy trên máy tính…
  • Queue (hàng đợi): là một collection được sử dụng để chứa nhiều phần tử trước khi xử lý. Bên cạnh các thao tác cơ bản của collection, Queue cung cấp các thao tác bổ sung như chèn, lấy ra và kiểm tra. Queue có thể được sử dụng như là FIFO (first-in, first-out – vào trước, ra trước)
  • Deque: là một collection được sử dụng để chứa nhiều phần tử trước khi xử lý. Ngoài các thao tác cơ bản của collection, một Deque cung cấp các thao tác bổ sung như chèn, lấy ra và kiểm tra. Deques có thể được sử dụng như là FIFO (first-in, first-out – vào trước, ra trước) và LIFO (last-in, first-out – vào sau, ra trước). Trong một Deque, tất cả các phần tử mới có thể được chèn vào, lấy ra và lấy ra ở cả hai đầu.
  • Map: là một đối tượng ánh xạ mỗi key tương úng với một giá trị. Map không thể chứa giá trị trùng lặp. Mỗi key có thể ánh xạ đến nhiều nhất một giá trị.

1. List

Cấu trúc List là dạng danh sách các phần tử trong đó có thể được trùng lắp. Vì List là một Interface nên chúng ta không thể tạo các đối tượng từ nó. Để sử dụng các tính năng của List Interface, chúng ta có thể sử dụng các class sau:

  • ArrayList
  • LinkedList
  • Vector

1.1. ArrayList

ArrayList là một loại cấu trúc dữ liệu được sử dụng để lưu trữ các phần tử tương tự nhau. Các phần tử trong ArrayList có thể được truy cập và thay đổi một cách dễ dàng bằng cách sử dụng index. Và có khả năng tự động mở rộng kích thước, điều này giúp cho việc thêm hoặc xóa phần tử khỏi danh sách trở nên linh hoạt hơn.

ArrayList Data Structure – Nguồn: Emmanuel Abiola

1.2. LinkedList

LinkedList là một cấu trúc dữ liệu mà trong đó các phần tử được liên kết với nhau thông qua các địa chỉ bộ nhớ, do đó không cần phải cấp phát toàn bộ một khối bộ nhớ liên tục cho dữ liệu. Các phần tử có thể được chèn hoặc xóa bất kỳ lúc nào.

1.3. Vector

Tương tự như ArrayList vì cả hai đều triển khai dưới dạng List Interface nhưng có một số điểm khác biệt giữa chúng.

  • Vector được đồng bộ, tức là trong môi trường đa luồng, tại một thời điểm chỉ có một thread được thực thi, các thread còn lại ở trong trạng thái chờ cho đến khi thread hiện tại giải phóng đối tượng.
  • Bởi vì tại một thời điểm chỉ có một luồng truy cập nên nếu có luồng khác cố gắng truy cập vào thì sẽ văng exception (cụ thể là ConcurrentModificationException).

2. Set

Set lưu trữ các phần tử không trùng lặp và không có thứ tự cụ thể. Khi thêm một phần tử vào Set, nếu phần tử ấy đã tồn tại trong Set rồi thì nó sẽ không được thêm vào và không có tác động gì đến Set ban đầu.

2.1. HashSet

HashSet được sử dụng để lưu trữ các phần tử không có thứ tự, vì vậy không có cách nào để truy xuất các phần tử theo thứ tự cụ thể. HashSet kế thừa những đặc điểm của Setđiển hình là chỉ chứa các phần tử duy nhất. Nếu chúng ta thêm một phần tử đã có trong HashSet thì phần tử đó sẽ bị bỏ qua.

2.2. LinkedHashSet

LinkedHashSet tương tự như HashSet, tuy nhiên có hỗ trợ duy trì thứ tự của các phần tử được thêm vào danh sách.

2.3. TreeSet

TreeSet được sử dụng để lưu trữ các phần tử theo thứ tự tăng dần hoặc giảm dần. Nó thừa hưởng những đặc điểm từ interface NavigableSet và class SortedSetNgoài ra, TreeSet sử dụng TreeMap để lưu trữ các phần tử.

3. Queue

Queue là một thành phần của Collections trong Java, được sử dụng để lưu trữ và quản lý các phần tử theo thứ tự First in, First out (FIFO). Các phần tử mới sẽ được thêm vào cuối hàng đợi và phần tử cũ sẽ được xóa khỏi đầu hàng đợi.

3.1. PriorityQueue

PriorityQueue là một cấu trúc dữ liệu trong đó mỗi phần tử có thể được sắp xếp theo thứ tự ưu tiên. Điều này hữu ích cho các phần tử với độ ưu tiên cao hơn sẽ được lấy ra trước và ngược lại các phần tử với ưu tiên thấp hơn thì sẽ được lấy ra sau.

4. Map

Map là một trong những cấu trúc dữ liệu quan trọng trong lập trình Java. Nó được sử dụng để biểu diễn một tập hợp các phần tử theo cặp key-value, trong đó key là giá trị duy nhất và value là giá trị tương ứng với key.

4.1. HashMap

HashMap là một class trong ngôn ngữ lập trình Java được sử dụng để lưu trữ các đối tượng theo cặp key-value. Điều này giúp cho việc truy cập và tìm kiếm các phần tử trong HashMap trở nên nhanh chóng và hiệu quả.

4.2. HashTable

Giống như HashMap, HashTable lưu trữ các đối tượng theo cặp key-value. Nhưng khác với HaspMap cho phép một key là null và nhiều value null thì HashTable không cho phép bất kỳ key hoặc value null. HashTable là đồng bộ (synchronized) and HashMap là không đồng bộ (not synchronized).

4.3. LinkedHashMap

LinkedHashMap là một class con của HashMap trong Java. Nó kế thừa tất cả tính năng của HashMap và bổ sung thêm các đặc điểm mới. Nếu như HashMap không thể đảm bảo được thứ tự phần tử chèn vào thì LinkedHashMap là phiên bản cải tiến. Định dạng dữ liệu trong LinkedHashMap được giữ nguyên, tức là các phần tử được lưu giữ theo thứ tự chèn vào.

4.4. TreeMap

TreeMap trong Java là một class kế thừa AbstractMap và triển khai của NavigableMap Interface ( NavigableMap kế thừa SortedMap, SortedMap kế thừa Map Interface) trong Collections Framework nên nó sẽ có một vài đặc điểm và phương thức tương đồng với Map và SortedMap và NavigableMap.

  • TreeMap có tính năng tự động sắp xếp các phần tử theo thứ tự tăng dần của key, giúp cho việc truy xuất dữ liệu nhanh chóng.
  • Không cho phép giá trị null làm key, nếu không sẽ văng exception NullPointerException.

Tài liệu tham khảo:

https://viettuts.vn/java-collection
https://www.geeksforgeeks.org/how-to-learn-java-collections-a-complete-guide
https://200lab.io/blog/tong-quan-ve-collections-trong-java
Published inJava Core

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *