Tất tần tật về Queue trong Java

Ngày đăng: 17/04/2020   -    Cập nhật: 14/04/2021
Tiếp tục series hướng dẫn tự học Java toàn tập. Bài viết này mình sẽ giúp bạn học về Queue trong Java. Đây là một dạng cấu trúc dữ liệu mà lập trình viên Java nào cũng cần phải nắm được.


Tất tần tật về Queue trong Java

Tất tần tật về Queue trong Java


Bài viết này bao gồm các phần sau đây:


  • Queue Interface
  • Deque Interface
  • LinkedList
  • ArrayDeque
  • BlockingQueue Interface
  • ArrayBlockingQueue Interface
  • LinkedBlockingQueue


Ok, chúng ta sẽ bắt đầu tìm hiểu phần đầu tiên.


PHẦN 1: QUEUE INTERFACE TRONG JAVA



Queue interface của Java Collection Framework cung cấp chức năng của cấu trúc dữ liệu hàng đợi.


Nếu bạn chưa hiểu về Java Collection Framework thì vui lòng đọc lại bài viết này: List trong Java
 

Queue mở rộng (kế thừa) Collection interface.


1.1. CÁC CLASS TRIỂN KHAI QUEUE INTERFACE



Queue là một interface, nên chúng ta không thể triển khai trực tiếp interface đó.


Để sử dụng các tính năng của cấu trúc dữ liệu Queue, chúng ta cần sử dụng các class triển khai nó:



  • ArrayDeque
  • LinkedList
  • PriorityQueue

Các class triển khai Queue interface trong Java

Các class triển khai Queue interface trong Java


1.2. CÁC INTERFACE KẾ THỪA QUEUE




Trong Java, Queue interface cũng được kế thừa bởi nhiều subinterface khác nhau:


  • Deque
  • BlockingQueue
  • BlockingDeque
 
Các interface kế thừa Queue interface trong Java

Các interface kế thừa Queue interface trong Java


1.3. CÁCH LÀM VIỆC CỦA CẤU TRÚC DỮ LIỆU QUEUE



Queue có nghĩa là "Hàng đợi" (bạn có thể liên tưởng đến việc xếp hàng vậy)


Trong hàng đợi (trong Queue), các phần tử được lưu trữ và truy cập theo cách nhập trước, xuất trước.


Có nghĩa là:



  • Khi thêm phần tử thì sẽ xếp vào phía sau
  • Khi loại bỏ phần tử thì sẽ loại bỏ từ phía trước

Cách làm việc của cấu trúc dữ liệu Queue

Cách làm việc của cấu trúc dữ liệu Queue




1.4. CÁCH SỬ DỤNG QUEUE TRONG JAVA.



Trong Java, chúng ta phải import package java.util.Queue để sử dụng Queue.



// LinkedList triển khai Queue
Queue<Stringanimal1 = new LinkedList<>();

// Array triển khai Queue
Queue<Stringanimal2 = new ArrayDeque<>();

// Priority Queue triển khai Queue
Queue<Stringanimal3 = new PriorityQueue<>();
 


Ở đây, chúng ta đã tạo các đối tượng animal1, animal2animal3 của các class LinkedList, ArrayDequePriorityQueue tương ứng.


Các đối tượng này có thể sử dụng các tính năng của Queue interface.



1.5. CÁC PHƯƠNG THỨC CỦA QUEUE TRONG JAVA



Queue interface có tất cả các phương thức của Collection interface. Đó là bởi vì Collection là interface cha của Queue.


Một số phương thức thường được sử dụng của Queue interface là:



  • add() - Chèn phần tử đã chỉ định vào hàng đợi. Nếu tác vụ thành công, add() trả về true, nếu không nó sẽ ném ra một ngoại lệ.
  • offer() - Chèn phần tử đã chỉ định vào hàng đợi. Nếu tác vụ thành công, offer() trả về true, nếu không nó sẽ trả về false.
  • element() - Trả về phần đầu của hàng đợi. Ném một ngoại lệ nếu hàng đợi trống.
  • peek() - Trả về đầu của hàng đợi. Trả về null nếu hàng đợi trống.
  • remove() - Trả về và xóa phần đầu của hàng đợi. Ném một ngoại lệ nếu hàng đợi trống.
  • poll() - Trả về và loại bỏ phần đầu của hàng đợi. Trả về null nếu hàng đợi trống.


1.6. VÍ DỤ TRIỂN KHAI QUEUE INTERFACE TRONG JAVA



Để hiểu thêm về Queue và cách làm việc với cấu trúc dữ liệu Queue, chúng ta cùng làm ví dụ sau:


TRIỂN KHAI CLASS LINKEDLIST



Chúng ta sẽ thử làm ví dụ triển khai class LinkedList.



// import package cần thiết
import java.util.Queue;
import java.util.LinkedList;

class Main {

    public static void main(String[] args) {
        // Tạo Queue sử dụng class LinkedList
        Queue<Integernumbers = new LinkedList<>();

        // Chèn phần tử chỉ định vào Queue bằng phương thức offer
        numbers.offer(1);
        numbers.offer(2);
        numbers.offer(3);
        System.out.println("Queue: " + numbers);

        // Truy cập các phần tử trong Queue
        int accessedNumber = numbers.peek();
        System.out.println("Truy cập phần tử: " + accessedNumber);

        // Loại bỏ các phần tử tron Queue
        int removedNumber = numbers.poll();
        System.out.println("Loại bỏ phần tử: " + removedNumber);

        System.out.println("Cập nhật Queue: " + numbers);
    }
}
 



Khi chạy chương trình, kết quả là:

 


Queue: [1, 2, 3]
Truy cập phần tử: 1
Loại bỏ phần tử: 1
Cập nhật Queue: [2, 3]
 



Hãy để ý cách loại bỏ phần tử trong cấu trúc dữ liệu Queue. Bạn thấy có gì đặc biệt không? :D

 

TRIỂN KHAI CLASS PRIORITYQUEUE



Đây là một ví dụ khác về Queue mà sử dụng class PriorityQueue



// import package cần thiết
import java.util.Queue;
import java.util.PriorityQueue;

class Main {

    public static void main(String[] args) {
        // Tạo Queue sử dụng class PriorityQueue
        Queue<Integernumbers = new PriorityQueue<>();

        // Chèn phần tử vào Queue bằng phương thức offer
        numbers.offer(5);
        numbers.offer(1);
        numbers.offer(2);
        numbers.offer(4);
        System.out.println("Queue: " + numbers);

        // Truy cập phần tử trong Queue
        int accessedNumber = numbers.peek();
        System.out.println("Truy cập phần tử: " + accessedNumber);

        // Loại bỏ phần tử trong Queue
        int removedNumber = numbers.poll();
        System.out.println("Loại bỏ phần tử: " + removedNumber);

        System.out.println("Cập nhật Queue: " + numbers);
    }
}
 


Khi chạy chương trình, kết quả nhận được là:



Queue: [1, 4, 2, 5]
Truy cập phần tử: 1
Loại bỏ phần tử: 1
Cập nhật Queue: [2, 4, 5]
 


Kiểu cấu trúc dữ liệu dạng First in, Firt out mà trông không giống lắm nhỉ?


Lẽ ra là "Chèn vào từ phía sau" thì kết quả phải là: [5, 1, 2, 4] chứ đúng không? :D


Đó là vì cách hoạt động của PriorityQueue hơi khác một tý.


Trong các phần tiếp theo, chúng ta sẽ tìm hiểu về kỹ hơn về các subinterface khác nhau của Queue để bạn hiểu rõ vấn đề này.


Còn tiếp...


---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0383.180086
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #icthanoi #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp
Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!