Trong lập trình Java, Queue được biết đến là một dạng cấu trúc dữ liệu hàng đợi, dùng lưu trữ các phần tử theo thứ tự. Tuy nhiên nhằm giúp bạn hiểu rõ hơn về Queue và cách áp dụng nó như thế nào vào trong lập trình Java. Bài viết dưới đây sẽ chia sẻ chi tiết về Queue trong Java. Bao gồm các phần đi từ giải thích khái niệm Queue là gì? Hướng dẫn cách biểu biễn Queue và trình bày về các hoạt động cơ bản trên cấu trúc dữ liệu hàng đợi Queue trong lập trình hướng đối tượng Java bao gồm cách lấy, xoá một phần tử từ Queue, kiểm tra phần tử đã có trong Queue chưa và cách để duyệt qua các phần tử trong Queue.
Trong lập trình Java, tập hợp Queue được sử dụng để lưu trữ các phần tử theo một thứ tự, nó cũng tương tự như List nhưng cơ chế hoạt động của Queue là First In First Out. Có nghĩa là phần tử nào được add vào đầu tiên thì khi lấy ra thì được lấy ra đầu tiên. Các em hãy tưởng tượng như khi mình đi siêu thị và xếp hàng chờ thanh toán. Ai xếp hàng trước thì sẽ được thanh toán trước. Ai ở sau cùng sẽ thanh toán sau.
Chúng ta có thể sử dụng các tập hợp của Queue như sau
1
2
3
Queue queueA = new LinkedList();
Queue queueB = new PriorityQueue();
Chúng ta có 2 cách để thêm giá trị vào Queue. Các phần tử sẽ được add vào cuối của Queue, chúng ta có thể sử dụng phương thức add hoặc offer để add các phần tử vào cuối. Sự khác nhau giữa add và offer là khi Queue đã đầy nếu ta sử dụng phương thức add thì sẽ nhận được ngoại lệ (Exception) còn offer thì chúng ta nhận được giá trị false
1
2
3
4
5
Queue<String> queue = new LinkedList<>();
queue.add("element 1");
queue.offer("element 2");
Chúng ta có thể sử dụng phương thức poll và remove để lấy phần tử đầu tiên của Queue. Sự khác nhau giữa poll và remove là nếu Queue là rỗng thì phương thức remove sẽ ném lỗi còn poll sẽ trả về giá trị null.
1
2
3
4
5
6
7
8
Queue<String> queue = new LinkedList<>();
queue.add("element 1");
queue.add("element 2");
String element1 = queue.poll();
String element2 = queue.remove();
Để lấy phần tử đầu tiên của Queue chúng ta có thể sử dụng phương thức element hoặc peek. Phương thức element sẽ ném ra ngoại lệ nếu Queue là rỗng, còn peek sẽ trả về là null
1
2
3
4
5
6
7
8
Queue<String> queue = new LinkedList<>();
queue.add("element 1");
queue.add("element 2");
queue.add("element 3");
String firstElement = queue.element();
String firstElement = queue.peek();
Để xóa một phần tử chúng ta dùng phương thức remove
1
2
3
4
5
6
Queue<String> queue = new LinkedList<>();
queue.add("element 0");
queue.add("element 1");
String removedElement = queue.remove();
Chúng ta sử dụng phương thức clear để xóa hết các phần tử trong Queue
1
queue.clear();
Chúng ta sử dụng phương thức contains để kiểm tra phần tử đã tồn tại trong Queue chưa
1
2
3
4
5
6
Queue<String> queue = new LinkedList<>();
queue.add("Mazda");
boolean containsMazda = queue.contains("Mazda");
boolean containsHonda = queue.contains("Honda");
Chúng ta có thể sử dụng Iterator hoặc foreach để duyệt qua các phần tử trong Queue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Queue<String> queue = new LinkedList<>();
queue.add("element 0");
queue.add("element 1");
queue.add("element 2");
//access via Iterator
Iterator<String> iterator = queue.iterator();
while(iterator.hasNext(){
String element = iterator.next();
}
//access via new for-loop
for(String element : queue) {
//do something with each element
}