ในjava.util.PriorityQueueเรามีวิธีการและadd(E e)
offer(E e)
ทั้งสองวิธีมีการบันทึกไว้เป็น:
แทรกองค์ประกอบที่ระบุลงในคิวลำดับความสำคัญนี้
ความแตกต่างระหว่างสองวิธีนี้มีอะไรบ้าง
ในjava.util.PriorityQueueเรามีวิธีการและadd(E e)
offer(E e)
ทั้งสองวิธีมีการบันทึกไว้เป็น:
แทรกองค์ประกอบที่ระบุลงในคิวลำดับความสำคัญนี้
ความแตกต่างระหว่างสองวิธีนี้มีอะไรบ้าง
คำตอบ:
ความแตกต่างคือการที่offer()
จะกลับมาfalse
ถ้ามันล้มเหลวที่จะแทรกองค์ประกอบในขนาดที่ จำกัดคิวในขณะที่จะโยนadd()
IllegalStateException
คุณควรใช้offer()
เมื่อความล้มเหลวในการแทรกองค์ประกอบจะเป็นเรื่องปกติและadd()
เมื่อความล้มเหลวจะเกิดขึ้นเป็นพิเศษ (ที่ต้องจัดการ)
ในการค้นหาความแตกต่างเราจำเป็นต้องติดตามPriorityQueue API javadocsซึ่งจะมีส่วน "ระบุโดย" ที่อ้างถึงผู้อ่านไปยังวิธีการที่เกี่ยวข้องในQueue
อินเทอร์เฟซ:
แทรกองค์ประกอบที่ระบุลงในคิวนี้ถ้าเป็นไปได้ที่จะทำเช่นนั้นทันทีโดยไม่ละเมิดข้อ จำกัด ด้านความจุคืนจริงเมื่อสำเร็จและโยน IllegalStateException หากไม่มีพื้นที่ว่างในขณะนี้ ...
ส่งคืน:true
(ตามที่ระบุโดยCollection.add (E) )
พ่น:IllegalStateException
- หากองค์ประกอบไม่สามารถเพิ่มได้ในขณะนี้เนื่องจากข้อ จำกัด ความจุ ...
แทรกองค์ประกอบที่ระบุในคิวนี้ถ้าเป็นไปได้ที่จะทำทันทีโดยไม่ละเมิดข้อ จำกัด ความจุ เมื่อใช้คิวที่จำกัดความจุวิธีนี้โดยทั่วไปจะนิยมเพิ่ม (E) ซึ่งไม่สามารถแทรกองค์ประกอบได้โดยการโยนข้อยกเว้นเท่านั้น ...
ส่งคืน:true
ถ้าองค์ประกอบถูกเพิ่มลงในคิวนี้มิฉะนั้นfalse
...
ทั้งสองวิธีมีอยู่เพราะสิ่งเหล่านี้จะต้องดำเนินการโดยอินเตอร์เฟสที่ประกาศไว้
โปรดทราบว่าเนื่องจาก PriorityQueue นั้นไม่ได้ จำกัด (ตามที่ระบุไว้ใน javadocs: " ลำดับความสำคัญที่ไม่ได้ จำกัดตามลำดับความสำคัญฮีป ... ") การกำหนดลักษณะของนักออกแบบ API ที่แสดงด้านบนจึงไม่สามารถใช้งานได้ ซึ่งหมายความว่ามันจะขึ้นอยู่กับดุลยพินิจของโปรแกรมเมอร์ในการเลือกวิธีที่เหมาะสมกับความต้องการของพวกเขาในบริบทการใช้งานเฉพาะ