Sự khác biệt của các phương thức thêm và cung cấp PriorityQueue của Java là gì?


12

Trong java.util.P WarriorityQueue, chúng ta có các phương thức add(E e)offer(E e). Cả hai phương pháp đều được ghi lại là:

Chèn phần tử được chỉ định vào hàng đợi ưu tiên này.

Sự khác biệt giữa hai phương pháp này là gì?

Câu trả lời:


15

Sự khác biệt là offer()sẽ trả về falsenếu không chèn phần tử vào Hàng đợi bị giới hạn kích thước , trong khi đó add()sẽ ném một IllegalStateException.

Bạn nên sử dụng offer()khi thất bại để chèn một phần tử là bình thường và add()khi thất bại sẽ là một sự cố đặc biệt (cần phải xử lý).


3

Để tìm ra sự khác biệt, người ta cần tuân theo các javadocs API PriorityQueue , lần lượt có các phần "Được chỉ định bởi" giới thiệu người đọc đến các phương thức tương ứng trong Queuegiao diện:

  • Xếp hàng.add

    Chèn phần tử được chỉ định vào hàng đợi này nếu có thể thực hiện ngay lập tức mà không vi phạm các hạn chế về dung lượng, trả về đúng khi thành công và ném IllegalStateException nếu không có chỗ trống hiện tại ...
    Trả về: true(như được chỉ định bởi Collection.add (E) )
    Ném: IllegalStateException- nếu phần tử không thể được thêm vào lúc này do hạn chế về dung lượng ...

  • Queue.offer

    Chèn phần tử được chỉ định vào hàng đợi này nếu có thể thực hiện ngay lập tức mà không vi phạm các hạn chế về dung lượng. Khi sử dụng hàng đợi bị giới hạn dung lượng, phương pháp này thường được ưu tiên thêm (E), có thể không chèn một phần tử chỉ bằng cách ném ngoại lệ ...
    Trả về: truenếu phần tử được thêm vào hàng đợi này, thì false...

Cả hai phương pháp đều có mặt vì những phương thức này được yêu cầu thực hiện bởi giao diện khai báo.

Lưu ý rằng vì PriorityQueue không bị ràng buộc (như đã nêu trong javadocs: " hàng đợi ưu tiên không giới hạn dựa trên một đống ưu tiên ..."), nên không áp dụng tùy chọn của các nhà thiết kế API được trình bày ở trên. Điều này có nghĩa là tùy ý lập trình viên chọn phương thức phù hợp hơn với nhu cầu của họ trong bối cảnh sử dụng cụ thể.


2
Pffft bạn đã đi và nhìn vào các tài liệu. Yếu. ; P
yannis

1
@YannisRizos điều tiếp theo bạn sẽ thấy là tôi phàn nàn như Col Shrapnel :) oh bạn không thể cạnh tranh với câu trả lời 30 giây: một câu hỏi sẽ nhận được 5 câu trả lời trước khi bạn thậm chí có thể tìm thấy một liên kết thích hợp blah blah
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.