Bài học Java Core 5: Khung bộ sưu tập Java

Tram Ho

Java Collections framework là một tập hợp các lớp và giao diện trong Java cung cấp các cấu trúc dữ liệu để lưu trữ, truy xuất và quản lý các đối tượng trong Java. Nó cung cấp một số loại cấu trúc dữ liệu phổ biến như List, Set và Map, cũng như các cấu trúc dữ liệu phức tạp hơn như Queue, Stack và Tree. Java Collections framework có thể được sử dụng để tăng tính hiệu quả, giảm thời gian và chi phí của các hoạt động xử lý dữ liệu trong Java.

Sau đây ta sẽ đi chi tiết các interface của Java Collections framework

1. List

List trong Java là một interface của Java Collection Framework, cung cấp các phương thức để thao tác với danh sách các phần tử. List cho phép lưu trữ các phần tử trùng nhau và theo thứ tự chèn vào.

Một số phương thức cơ bản của List:

  • add(E element): thêm phần tử vào cuối danh sách.
  • add(int index, E element): thêm phần tử vào vị trí được chỉ định trong danh sách.
  • remove(Object obj): xoá phần tử được chỉ định khỏi danh sách.
  • get(int index): trả về phần tử ở vị trí chỉ định trong danh sách.
  • size(): trả về số lượng phần tử trong danh sách.
  • clear(): xoá tất cả các phần tử trong danh sách.

List là một interface nên không thể khởi tạo đối tượng List trực tiếp. Thay vào đó, ta có thể sử dụng các lớp cài đặt của List như ArrayList, LinkedList, Vector, … để tạo ra danh sách phù hợp với nhu cầu của mình.

Ví dụ:

Kết quả là

2. Set

Trong Java, Set là một interface trong Collection framework được sử dụng để lưu trữ tập hợp các phần tử không trùng lặp. Nó kế thừa interface Collection và bổ sung các tính năng bổ sung để quản lý các tập hợp các phần tử không trùng lặp.

Các đặc tính của Set:

  • Không chứa các phần tử trùng lặp.
  • Có thể chứa một số phần tử null (nếu được phép).
  • Không đảm bảo thứ tự của các phần tử.

Một số phương thức phổ biến của Set:

  • add(E e): Thêm một phần tử vào Set.
  • remove(Object o): Xóa một phần tử khỏi Set.
  • contains(Object o): Kiểm tra xem Set có chứa phần tử được chỉ định không.
  • size(): Trả về số lượng phần tử trong Set.
  • iterator(): Trả về một Iterator để lặp lại các phần tử trong Set.

Ví dụ về Set:

Kết quả là :

3. Map

Trong Java Collections Framework, Map là một interface được sử dụng để lưu trữ một tập hợp các cặp key-value, trong đó mỗi key được liên kết với một giá trị value. Map là một interface con của Collection và được sử dụng để tạo ra các bản đồ dữ liệu trong Java.

Một số đặc điểm của Map:

  • Key trong Map là duy nhất và không thể trùng nhau.
  • Giá trị value có thể bị trùng nhau.
  • Map không bảo đảm thứ tự của các cặp key-value.

Map được triển khai bởi các lớp như HashMap, TreeMap, LinkedHashMap, v.v.

Ví dụ:

Kết quả cho ta thấy :

4. Queue

Queue là một cấu trúc dữ liệu trong Java Collections Framework, giúp lưu trữ các phần tử theo cơ chế FIFO (First In First Out), tức là phần tử đầu tiên được thêm vào sẽ là phần tử đầu tiên được lấy ra khỏi hàng đợi.

Một số phương thức quan trọng của Queue:

  • add(element): thêm một phần tử vào hàng đợi, nếu hàng đợi không đủ chỗ thì sẽ ném ra ngoại lệ.
  • offer(element): thêm một phần tử vào hàng đợi, trả về true nếu thêm thành công, false nếu hàng đợi không đủ chỗ.
  • remove(): lấy ra và xóa phần tử đầu tiên của hàng đợi, nếu hàng đợi rỗng sẽ ném ra ngoại lệ.
  • poll(): lấy ra và xóa phần tử đầu tiên của hàng đợi, trả về null nếu hàng đợi rỗng.
  • peek(): trả về phần tử đầu tiên của hàng đợi mà không xóa nó, trả về null nếu hàng đợi rỗng.

Ví dụ:

Kết quả:

5. Stack

Stack (Ngăn xếp) là một cấu trúc dữ liệu dạng danh sách (List) đặc biệt trong đó thao tác chèn và xóa đều chỉ diễn ra ở một đầu của danh sách. Điểm đặc biệt của Stack là người ta gọi nó là cấu trúc dữ liệu LIFO (Last-In-First-Out), tức là phần tử được chèn vào cuối cùng sẽ được lấy ra đầu tiên. Ngăn xếp thường được sử dụng trong các thuật toán liên quan đến việc phân tích cú pháp, lưu trữ trạng thái tạm thời, tìm đường đi (DFS) và các thuật toán sắp xếp, tìm kiếm, đảo ngược chuỗi, thực hiện undo-redo trong các ứng dụng văn bản, đồ họa.

Stack có 2 phương thức cơ bản là push() để thêm một phần tử vào đỉnh ngăn xếp, và pop() để lấy phần tử ở đỉnh ngăn xếp ra. Ngoài ra, Stack cũng cung cấp một số phương thức khác như empty() để kiểm tra ngăn xếp có rỗng hay không, peek() để lấy giá trị của phần tử đầu tiên mà không xóa nó khỏi ngăn xếp, search() để tìm kiếm vị trí của một phần tử trong ngăn xếp.

Ví dụ về việc sử dụng Stack để đảo ngược một chuỗi:

Kết quả:

6. Tree

Tree trong Java Collections Framework thường được sử dụng để tham chiếu đến các cấu trúc dữ liệu dạng cây như Binary Search Tree (BST), AVL Tree, Red-Black Tree, và nhiều loại cây khác.

Một Tree trong Java là một cấu trúc dữ liệu được tổ chức thành các nút (nodes) và liên kết với nhau bằng các cạnh (edges) để tạo thành một cây. Nút gốc (root node) là nút trên cùng của cây, trong khi nút lá (leaf node) là các nút không có nút con. Các nút khác là các nút nội (internal nodes).

Trong Java, chúng ta có thể sử dụng interface “Tree” để thao tác với các cây như BST hoặc TreeMap, và các phương thức chính bao gồm: add, remove, contains, size, và clear.

Ví dụ:

Kết quả:

Trong bài viết này, chúng ta đã tìm hiểu về Java Collections Framework, một bộ sưu tập các lớp và giao diện được sử dụng để lưu trữ và quản lý các đối tượng. Chúng ta đã tìm hiểu về các loại collection như List, Set, Map và các cấu trúc dữ liệu khác như Queue, Stack và Tree. Tóm lại, Java Collections Framework là một phần quan trọng của Java và là công cụ hữu ích giúp các lập trình viên quản lý và thao tác dữ liệu một cách dễ dàng và hiệu quả.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo