Tôi chỉ thấy giao diện Hàng đợi, không có lớp Hàng đợi trong Bộ sưu tập Java?Lớp xếp hàng trong Bộ sưu tập Java ở đâu?
Trả lời
Các tài liệu cho Queue
danh sách triển khai khác nhau, bao gồm
Chọn một thực hiện phù hợp với nhu cầu của bạn.
Javadocs cung cấp danh sách các lớp triển khai Queue
.
Tất cả các lớp Thực hiện Known:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Ngoài ra còn có một số subinterface đó bạn có thể thấy hữu ích:
Tất cả các subinterface biết:
BlockingDeque < E>, BlockingQueue < E>, Deque < E>
Tự hỏi tại sao mọi người không truy cập JavaDocs: P +1 – Perpetualcoder
isnt Stack Overflow nhanh hơn google? – IAdapter
Đối với những người thực sự lười biếng, tôi sẽ lưu ý rằng tất cả những người có DeQue là hàng đợi đôi. – Powerlord
Queue có nhiều triển khai: từ API:
Tất cả Các lớp triển khai đã biết:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue,
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList,
PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Lưu ý rằng AbstractQueue không phải là một lớp cụ thể.
Một số trong số này là từ gói đồng thời, vì vậy nếu bạn đang thực hiện một jobqueue hoặc một cái gì đó tương tự, bạn nên đi cho ConcurrentLinkedQueue hoặc PriorityBlockingQueue (cho một heap) cho ex.
http://java.sun.com/javase/6/docs/api/java/util/Queue.html - xem phần "Tất cả các lớp triển khai đã biết". Có một loạt các triển khai phù hợp cho các mục đích khác nhau.
Cũng như sử dụng tài liệu API để tìm "tất cả các lớp triển khai đã biết", thường có các triển khai ngoài công lập khác có sẵn thông qua API công cộng (chỉ mà không yêu cầu tài liệu vô nghĩa). Nếu bạn nhấp vào "use", bạn cũng sẽ tìm thấy Collections.asLifoQueue (Deque
đã là Queue
, nhưng nó là FIFO chứ không phải là ngăn xếp).
Mỗi lần như vậy, tôi lại khám phá các trang "Sử dụng" và nghĩ, "Này, điều này thật tuyệt!" Và sau đó tôi quên chúng một lần nữa. –
Trang "sử dụng" không có giao diện người dùng lớn nhất. –
Mặc dù câu trả lời nghe có vẻ khinh miệt, Chúng thực sự khá tuyệt vời khi dạy bạn cách câu cá.Hàng đợi chỉ đơn giản là một cách để xem bộ sưu tập, vì vậy nhiều bộ sưu tập có thể triển khai bộ sưu tập đó. Đồng thời, những thứ hoạt động như bộ sưu tập nhưng với logic cụ thể khác (như hàng đợi luồng) có thể sử dụng cùng một giao diện.
Biết nơi để xem javadocs là một trợ giúp lớn. Tôi chắc chắn bạn đã nhìn nhưng không nghĩ đến việc xem xét các triển khai. Sống và học hỏi.
Đôi khi bạn cũng có thể phải theo dõi danh sách phụ/mở rộng. Giống như khi bạn nhìn vào Hàng đợi và thấy AbstractQueue, bạn có thể muốn xem những lớp nào thực hiện điều đó.
tôi sẽ thoát khỏi một trong -1s của bạn cho ya :)
import java.util.Queue;
chỉ là
Enqueue function == Queue_Object.add(input_value);
Dequeue function == Queue_Object.pull(); //return the value and delete it from queue
Không, không có lớp Queue
, bởi vì có rất nhiều cách khác nhau để thực hiện một hàng đợi và bạn phải chọn một hàng phù hợp với trường hợp sử dụng của bạn. Điều tương tự cũng xảy ra đối với bất kỳ bộ sưu tập nào khác trong khung công tác bộ sưu tập - ví dụ: ArrayList
và LinkedList
cả hai đều triển khai List
. Mẫu chung, là cách sử dụng tốt đối tượng thừa kế, là:
Giao diện , ví dụ: Queue
, xác định vai trò bạn muốn đối tượng phát;
Giao diện phụ, ví dụ: Deque
, tiếp tục mở rộng hoặc chuyên vai trò - trong trường hợp này hàng đợi "deque" hoặc double-ended cho phép bạn thêm và xóa các phần tử từ cả hai đầu của hàng đợi, trái ngược với chỉ thêm vào mặt sau và xóa khỏi mặt trước;
Lớp học cung cấp cách thực hiện cách đối tượng thực hiện vai trò. Ví dụ: ArrayDeque
sử dụng mảng có thể thay đổi kích thước để triển khai hàng đợi có hai hàng, có các điểm mạnh và điểm yếu khác nhau cho LinkedList
sử dụng danh sách được liên kết.
Để xây dựng trên ý tưởng về một giao diện như vai trò, lưu ý rằng mặc dù ArrayDeque
thực hiện Deque
, bạn có thể sử dụng nó như một Queue
mà không cần phải lo lắng về điều đó vì thực hiện cả hai giao diện có nghĩa là nó có thể chơi cả hai vai trò. Tương tự, LinkedList
có thể đội mũ List
, Queue
hoặc Deque
.
Vì lý do này, cách thông thường (được khuyến nghị) để sử dụng thứ gì đó như khung Bộ sưu tập là chương trình đến giao diện, nghĩa là sử dụng giao diện khi sử dụng lớp thay vì tên lớp. Ví dụ, bạn sẽ tạo một đối tượng như thế này:
Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");
Bằng cách này bạn có
- không gắn với một lớp học đặc biệt và có thể sử dụng một thả thay thế nếu cần thiết mà không cần phải sửa đổi nhiều và
- đang ghi lại những gì bạn đang làm với một lớp học bằng cách đặt tên cho vai trò của nó. Nguyên tắc chung giúp với mã này là mã tự ghi, về cơ bản là để cho chính mã đó tự giải thích mà không phải sử dụng nhận xét, v.v.
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);
while (!queue.isEmpty()) {
System.out.println(queue.remove());// prints 1 2 3
}
- 1. C Bộ sưu tập tiêu chuẩn ngôn ngữ ở đâu?
- 2. Hiệu suất của lớp Bộ sưu tập trong Java
- 3. LINQ Ở đâu trong mệnh đề sưu tập
- 4. Sắp xếp lại bộ sưu tập C#
- 5. Sắp xếp bộ sưu tập trong bộ sưu tập bằng cách sử dụng LINQ
- 6. Java: Nhận mặt hàng đầu tiên từ bộ sưu tập
- 7. Bộ sưu tập rác java
- 8. Bộ sưu tập giống Java trong PHP
- 9. Bộ sưu tập lười biếng trong Java
- 10. Sắp xếp bộ sưu tập dựa trên một bộ sưu tập khác
- 11. Sắp xếp một đối tượng bộ sưu tập Java dựa trên một lĩnh vực trong đó
- 12. Phá rừng ở Scala bộ sưu tập
- 13. Java Generics: thêm sai loại trong bộ sưu tập
- 14. java: trả lại bộ sưu tập
- 15. bộ sưu tập java so với bản đồ trong khung bộ sưu tập
- 16. Sự khác biệt giữa Bộ sưu tập và Bộ sưu tập Java
- 17. Cách sắp xếp bộ sưu tập trong Magento?
- 18. Các loại giá trị được lưu trữ ở đâu (C#) Bộ sưu tập chung
- 19. Bộ sưu tập xương sống ở đâu với điều kiện OR
- 20. Tôi có thể tìm hướng dẫn tốt về cách viết Bộ sưu tập C ở đâu?
- 21. Tôi sắp xếp ở đâu?
- 22. Thừa kế trong giao diện bộ sưu tập java
- 23. Bộ sưu tập java là gì?
- 24. Lớp SampleZipfileProvider ở đâu?
- 25. Bộ sưu tập các mẫu công cụ được cấp phép tự do ở đâu tốt?
- 26. MEF: Tôi nên đặt bộ phận sắp xếp ở đâu?
- 27. Bộ sưu tập trong Adobe Flex
- 28. Bộ sưu tập ngẫu nhiên Java
- 29. An toàn loại tốt hơn trong bộ sưu tập Java
- 30. Sắp xếp một bộ sưu tập của các đối tượng
Theo http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html, ArrayList không thực hiện Queue. –
Vâng, tôi nhận ra rằng một khi tôi quay trở lại để có được một vài liên kết; rõ ràng bộ nhớ của tôi bị lỗi. – Rob
Điều đó xảy ra. Tôi sẽ rất ấn tượng nếu bạn có toàn bộ thư viện Java được ghi nhớ. Nếu bạn có EE ghi nhớ tôi sẽ quay trở lại từ từ. –