Apa perbedaan metode add and offer dari Java's PriorityQueue?

12

Di java.util.PriorityQueue kita memiliki metode add(E e)dan offer(E e). Kedua metode didokumentasikan sebagai:

Menyisipkan elemen yang ditentukan ke dalam antrian prioritas ini.

Apa perbedaan antara kedua metode ini?

agen13
sumber

Jawaban:

17

Perbedaannya adalah bahwa offer()akan kembali falsejika gagal memasukkan elemen pada ukuran Antrian terbatas , sedangkan add()akan melempar IllegalStateException.

Anda harus menggunakan offer()ketika kegagalan untuk memasukkan elemen akan normal, dan add()ketika kegagalan akan menjadi kejadian luar biasa (yang perlu ditangani).

yannis
sumber
4

Untuk mengetahui perbedaannya, kita harus mengikuti javadocs API Prioritas yang pada gilirannya memiliki bagian "Ditentukan Oleh" yang merujuk pembaca ke masing-masing metode di Queueantarmuka:

  • Queue.add

    Menyisipkan elemen yang ditentukan ke dalam antrian ini jika memungkinkan untuk segera melakukannya tanpa melanggar batasan kapasitas, mengembalikan true setelah sukses dan melempar IllegalStateException jika tidak ada ruang yang tersedia saat ini ...
    Pengembalian: true(seperti yang ditentukan oleh Collection.add (E) )
    Melempar: IllegalStateException- jika elemen tidak dapat ditambahkan saat ini karena batasan kapasitas ...

  • Antri menawarkan

    Menyisipkan elemen yang ditentukan ke dalam antrian ini jika memungkinkan untuk segera melakukannya tanpa melanggar batasan kapasitas. Saat menggunakan antrian terbatas kapasitas, metode ini umumnya lebih disukai untuk menambahkan (E), yang dapat gagal memasukkan elemen hanya dengan melemparkan pengecualian ...
    Pengembalian: truejika elemen ditambahkan ke antrian ini, maka false...

Kedua metode hadir karena ini diperlukan untuk diimplementasikan oleh antarmuka yang dideklarasikan.

Perhatikan bahwa karena PriorityQueue tidak terikat (sebagaimana dinyatakan dalam javadocs: " antrian prioritas tidak terikat berdasarkan tumpukan prioritas ..."), preferensi desainer API yang dinyatakan di atas tidak berlaku. Ini berarti dibiarkan atas kebijaksanaan programmer untuk memilih metode yang lebih sesuai dengan kebutuhan mereka dalam konteks penggunaan tertentu.

agas
sumber
2
Pffft Anda pergi dan melihat dokumen. Lemah. ; P
yannis
1
@YannisRizos hal berikutnya yang akan Anda lihat adalah saya mengeluh seperti Kolonel Shrapnel :) oh Anda tidak dapat bersaing dengan jawaban 30 detik: sebuah pertanyaan akan mendapatkan 5 jawaban sebelum Anda bahkan dapat menemukan tautan yang sesuai blah blah
gnat