Ambil PriorityQueue
contoh http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
Adakah yang bisa memberi saya contoh di Queue
mana metode add
dan offer
berbeda?
Menurut Collection
dokumen tersebut, add
metode ini akan sering kali berusaha untuk memastikan bahwa elemen ada di dalam Collection
daripada menambahkan duplikat. Jadi pertanyaan saya adalah, apa perbedaan antara metode add
dan offer
?
Apakah offer
metode ini akan menambahkan duplikat? (Saya ragu itu karena jika a Collection
seharusnya hanya memiliki elemen yang berbeda, ini akan menghindarinya).
EDIT: Dalam PriorityQueue
satu add
dan offer
metode adalah metode yang sama (lihat jawaban saya di bawah). Adakah yang bisa memberi saya contoh kelas di mana metode add
dan offer
berbeda?
offer
vsadd
.Tidak ada perbedaan untuk penerapan
PriorityQueue.add
:Karena
AbstractQueue
sebenarnya ada perbedaan:sumber
add
metodenya berbeda denganoffer
metodenya?Perbedaan antara
offer
danadd
dijelaskan oleh dua kutipan berikut dari javadocs:Dari
Collection
antarmuka:Dari
Queue
antarmukaPriorityQueue
adalahQueue
implementasi yang tidak memberlakukan batasan penyisipan apa pun. Oleh karena itu, metodeadd
danoffer
memiliki semantik yang sama.Sebaliknya,
ArrayBlockingQueue
adalah implementasi di manaoffer
danadd
berperilaku berbeda, tergantung pada bagaimana antrian dibuat.sumber
Perbedaannya adalah sebagai berikut:
menawarkan metode - mencoba menambahkan elemen ke antrian, dan mengembalikan false jika elemen tidak dapat ditambahkan (seperti dalam kasus ketika antrian penuh), atau benar jika elemen ditambahkan, dan tidak mengeluarkan pengecualian tertentu .
tambahkan metode - mencoba menambahkan elemen ke antrian, mengembalikan nilai true jika elemen ditambahkan, atau melontarkan IllegalStateException jika tidak ada ruang yang tersedia saat ini.
sumber
dari kode sumber di jdk 7 sebagai berikut:
kita dapat dengan mudah mengetahui bahwa fungsi tambah akan mengembalikan nilai true ketika berhasil menambahkan elemen baru ke dalam antrian, tetapi memunculkan pengecualian ketika gagal.
sumber
The
Queue
menspesifikasikan interface yangadd()
akan melemparkanIllegalStateException
jika tidak ada ruang yang tersedia saat ini (dan sebaliknya kembalitrue
) sementaraoffer()
akan kembalifalse
jika elemen tidak bisa dimasukkan karena pembatasan kapasitas.Alasan mereka sama di a
PriorityQueue
adalah bahwa antrian ini ditetapkan untuk tidak dibatasi, yaitu tidak ada batasan kapasitas. Jika tidak ada batasan kapasitas, kontrakadd()
danoffer()
menampilkan perilaku yang sama.sumber
Saya akan menulis kode contoh kontrak java untuk metode penawaran dan menambahkan metode yang menunjukkan perbedaannya.
sumber
Sumber: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
Metode penawaran menyisipkan elemen jika memungkinkan, jika tidak mengembalikan false. Ini berbeda dengan metode Collection.add, yang bisa gagal menambahkan elemen hanya dengan melontarkan pengecualian yang tidak dicentang. Metode penawaran dirancang untuk digunakan ketika kegagalan adalah kejadian normal, bukan kejadian luar biasa, misalnya, dalam antrian berkapasitas tetap (atau "terbatas").
sumber