Java'nın PriorityQueue ekleme ve sunma yöntemlerinin farkı nedir?


12

In java.util.PriorityQueue biz yöntemleri var add(E e)ve offer(E e). Her iki yöntem de şu şekilde belgelenmiştir:

Belirtilen öğeyi bu öncelik sırasına ekler.

Bu iki yöntem arasındaki farklar nelerdir?

Yanıtlar:


18

Fark, yani offer()döner falsebu kısıtlı boyutu eleman eklemek için başarısız olursa sıra ise, add()bir durum oluşturur IllegalStateException.

Sen kullanmalıdır offer()bir öğe eklemek için başarısızlık normal olacağını ne zaman ve add()başarısızlık (ihtiyaçlar ele alınması olduğunu) istisnai bir oluşumu olacağını zaman.


4

Farkı bulmak için, okuyucunun arabirimdeki ilgili yöntemlere başvuran "Tarafından Belirtilen" bölümlerine sahip olan PriorityQueue API javadoc'larını takip etmek gerekir Queue:

  • Queue.add

    Kapasite kısıtlamalarını ihlal etmeden hemen bunu yapabiliyorsa, başarı üzerine true döndürerek ve şu anda kullanılabilir bir alan yoksa bir IllegalStateException özel durumunu atabiliyorsa, belirtilen öğeyi bu kuyruğa ekler ...
    Döndürür: true( Collection.add (E) tarafından belirtildiği gibi )
    Atar: IllegalStateException- kapasite kısıtlamaları nedeniyle eleman şu anda eklenemezse ...

  • Queue.offer

    Kapasite kısıtlamalarını ihlal etmeden hemen bunu yapabiliyorsanız, belirtilen elemanı bu kuyruğa ekler. Kapasite kısıtlı bir kuyruk kullanırken, bu yöntem genellikle (E) eklemek için tercih edilir, bu da sadece bir istisna atarak bir eleman ekleyemez ...
    Geri döner: trueeleman bu kuyruğa eklenmişse, başka false...

Her iki yöntem de mevcuttur, çünkü bunların bildirilen arabirim tarafından uygulanması gerekir.

PriorityQueue sınırsız olduğundan (javadocs'ta belirtildiği gibi: " öncelik yığınına dayalı sınırsız öncelik sırası ..."), yukarıda ifade edilen API tasarımcılarının tercihinin geçerli olmadığını unutmayın. Bu, belirli bir kullanım bağlamında ihtiyaçlarına daha uygun yöntemi seçmenin programcının takdirine bırakıldığı anlamına gelir.


2
Pffft gittin ve belgelere baktın. Güçsüz. ; P
yannis

1
@YannisRizos göreceğiniz bir sonraki şey, Col Shrapnel gibi şikayet etmem olurdu :) oh 30 saniye cevaplarla rekabet edemezsiniz: uygun bir bağlantı bulabilmeniz için bir soru 5 cevap alacaktır blah blah
gnat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.