mỗi những gì tôi học được, hàng đợi có một số trách nhiệm tuân thủ đầu tiên-trong-đầu-ra hành vi.
Bạn có thể đã đọc một cuốn sách văn bản hoặc một số ghi chú bài giảng hoặc một cái gì đó mô tả cách hoạt động của hàng đợi FIFO lý tưởng. Nhưng những gì bạn đã thất bại trong việc nhận ra là không phải tất cả các hàng đợi đều là FIFO. Không phải trong thế giới thực, và không phải trong các hệ thống máy tính. (Ví dụ, nếu (giả thuyết) Tổng thống Obama đã đi đến một nhà hàng MacDonalds bận rộn, bạn sẽ thấy rằng ông đã ngay lập tức di chuyển đến phía trước của hàng đợi. Đó là một hàng đợi hành xử trong một thời trang không FIFO.)
Dù sao , Java Queue
là một giao diện cho bất kỳ loại hàng đợi nào, không chỉ hàng đợi FIFO. Nó cũng hỗ trợ các hàng đợi ưu tiên và bất kỳ ngữ nghĩa xếp hàng nào khác mà bạn có thể mơ ước ... nếu bạn quan tâm đến việc cung cấp lớp triển khai của riêng bạn.
Điểm khác là hoạt động remove(E)
không cung cấp hoạt động "vui lòng khách hàng tiếp theo". Nó tương đương với một khách hàng quyết định rằng họ thực sự thích pizza ... và bước ra khỏi cửa. Một hàng đợi lý tưởng không hỗ trợ điều này, nhưng các lớp thư viện có thể sử dụng được ... vì các ứng dụng cần có khả năng thực hiện loại điều này.
Điểm mấu chốt là Java Collection
phân cấp lớp (bao gồm đầu mối Queue
) được thiết kế hữu ích và dễ sử dụng, thay vì cứng nhắc phù hợp với mô hình trừu tượng của cấu trúc dữ liệu của ai đó.
Nhưng sau đó Queue có thể cho phép một phương pháp sneakIn, cho phép bạn lẻn vào giữa một hàng đợi - đâu là phương pháp đó?
Vâng, vì hầu hết các ứng dụng thực sự không cần nó, nó không có ở đó. (Nếu đó là trường hợp sử dụng phổ biến, một phương thức như vậy sẽ được cung cấp, trong các lớp triển khai hàng đợi cụ thể ngay cả khi không ở trong giao diện Queue
.)
Một lần nữa, các lớp và giao diện Java được chỉ định cho tiện ích và khả năng sử dụng của chúng các chương trình thực sự, chứ không phải (trong trường hợp này) để chúng có thể mô hình POTUS trong một phần bánh burger.
Có lẽ tôi đã được rửa sạch bằng các định nghĩa sách văn bản và các phòng thí nghiệm C/C++ mà tôi đã làm ở trường.
Một giải thích khác là bạn nhầm lẫn mục đích thực sự của các định nghĩa, v.v.
Từ các tài liệu: "_Queues thường, nhưng không nhất thiết, đặt hàng các yếu tố trong một FIFO (đầu tiên trong đầu tiên-out) cách. Trong số các trường hợp ngoại lệ là hàng đợi ưu tiên, thứ tự các yếu tố theo một so sánh được cung cấp ator, hoặc các phần tử tự nhiên của các phần tử, và hàng đợi LIFO (hoặc ngăn xếp) để sắp xếp các phần tử LIFO (cuối cùng-ra-trước-ra) ...._ "Đọc thêm [ở đây] (http://docs.oracle. com/javase/6/docs/api/java/util/Queue.html) – jahroy
Tôi nghĩ rằng đó là để làm nổi bật hành vi của hàng đợi ưu tiên và triển khai như vậy. –
Xuất phát từ 'Queue mở rộng Bộ sưu tập'. Đó là một trong hai hoặc 'UnsupportedOperationException' và tôi ghét cả hai đều như nhau. Đó là một bất ngờ lớn khi chuyển từ 'LSP' nghiêm ngặt của' C++' sang 'Java'. –