Java 63. Hiểu rõ hàng đợi Queue và Deque trong lập trình Java



    Bản quyền thuộc về TITV.vn, 
    vui lòng không đăng tải lại nội dung từ trang này.

    Video giải thích chi tiết

    Giới thiệu về Queue trong lập trình

    Ví dụ về QUEUE trong cuộc sống


    Xếp hàng làm thủ tục lên máy bay

    Xếp hàng mua thức ăn






    QUEUE & DQUEUE TRONG LẬP TRÌNH JAVA


    • Hàng đợi (tiếng anh: Queue) là một cấu trúc dữ liệu dùng để lưu giữ các đối tượng theo cơ chế FIFO (viết tắt từ tiếng Anh: First In First Out), nghĩa là “vào trước ra trước”.

    • Hàng đợi PriorityQueuehàng đợi ưu tiên, nó lưu trữ các phần tử theo trật tự tự nhiên của phần tử (nếu các phần tử đó so sánh được với nhau – thi hành Comparable) hoặc một bộ so sánh Comparator được cung cấp cho PriorityQueue. 

    • Deque"hàng đợi 2 đầu". Với một hàng đợi thông thường, bạn thêm mọi thứ vào một đầu và lấy chúng từ đầu kia. Với hàng đợi kết thúc kép, bạn có thể thêm mọi thứ vào một trong hai đầu và lấy chúng từ một trong hai đầu. Điều đó làm cho nó linh hoạt hơn một chút; ví dụ, bạn có thể sử dụng nó như một ngăn xếp nếu bạn muốn.


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

    LINK: https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html


    Throws exception

    Returns special value


    Insert

    add(e)

    offer(e)

    Remove

    remove()

    poll()

    Examine

    element()

    peek()


    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.

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

    https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html

    Bổ sung các hàm: 


    First Element (Head)

    Last Element (Tail)



    Throws exception

    Special value

    Throws exception

    Special value

    Insert

    addFirst(e)

    offerFirst(e)

    addLast(e)

    offerLast(e)

    Remove

    removeFirst()

    pollFirst()

    removeLast()

    pollLast()

    Examine

    getFirst()

    peekFirst()

    getLast()

    peekLast()


     Code chi tiết 

    package main; import java.util.LinkedList; import java.util.Queue; public class ViduQueue { public static void main(String[] args) { Queue<String> danhSachSV = new LinkedList<String>(); danhSachSV.offer("TITV 1"); danhSachSV.offer("Nguyen Van A"); danhSachSV.offer("Nguyen Van B"); danhSachSV.offer("TITV 2"); while(true) { String ten = danhSachSV.poll(); // => lấy ra và xóa if(ten==null) { break; } //peek => lấy ra nhưng không xóa. System.out.println(ten); } } } 
     
     package main;
    
    import java.util.LinkedList;
    import java.util.PriorityQueue;
    import java.util.Queue;
    
    public class ViduPriorityQueue {
    	public static void main(String[] args) {
    		Queue<String> danhSachSV = new PriorityQueue<String>();
    		
    		danhSachSV.offer("TITV 1");
    		danhSachSV.offer("Nguyen Van B");
    		danhSachSV.offer("Nguyen Van A");
    		danhSachSV.offer("TITV 2");
    		
    		while(true) {
    			String ten = danhSachSV.poll();  // => lấy ra và xóa
    			if(ten==null) {
    				break;
    			}
    			//peek => lấy ra nhưng không xóa.
    			System.out.println(ten);
    		}
    	}
    }

     package main;
    
    import java.util.ArrayDeque;
    import java.util.Deque;
    import java.util.LinkedList;
    import java.util.Queue;
    
    public class ViduDeque {
    	public static void main(String[] args) {
    		Deque<String> danhSachSV = new ArrayDeque<String>();
    		
    		danhSachSV.offer("TITV 1");
    		danhSachSV.offer("Nguyen Van A");
    		danhSachSV.offer("Nguyen Van B");
    		danhSachSV.offer("TITV 2");
    		danhSachSV.offerLast("TITV 4");
    		danhSachSV.offerFirst("TITV 0");
    		
    		
    		// TITV 4 > TITV 2 > Nguyen Van B > Nguyen Van A > TITV 1 > TITV 0
    		
    		
    		while(true) {
    			String ten = danhSachSV.poll();  // => lấy ra và xóa
    			if(ten==null) {
    				break;
    			}
    			//peek => lấy ra nhưng không xóa.
    			System.out.println(ten);
    		}
    		
    	}
    }
     

    Không có nhận xét nào:

    Đăng nhận xét