ArrayBlockingQueue vs ArrayDeque
ArrayBlockingQueue
- เก็บข้อมูลแบบ FIFO (First-In-First-Out)
- Insertion ที่ tail, Removal ที่ head
- Thread-safe
- Bounded - กำหนด capacity ตอนสร้าง เปลี่ยนไม่ได้
- Implements BlockingQueue interface
ArrayDeque
- Resizable-array implementation ของ Deque interface
- ไม่มีข้อจำกัด capacity - ขยายได้ตามต้องการ
- Not thread-safe - ต้อง synchronize เองถ้าใช้หลาย threads
- ห้าม null elements
- เร็วกว่า Stack เมื่อใช้เป็น stack, เร็วกว่า LinkedList เมื่อใช้เป็น queue
ตารางเปรียบเทียบ
| Key | ArrayBlockingQueue | ArrayDeque |
|---|---|---|
| Interface | BlockingQueue | Deque |
| Bounded | ใช่ (fixed capacity) | ไม่ (resizable) |
| Thread Safe | ใช่ | ไม่ |
| Insertion/Removal | Tail/Head เท่านั้น (FIFO) | ทั้งสองข้าง (Deque) |
เมื่อไหร่ควรใช้ไหน?
- ArrayBlockingQueue: Producer-consumer patterns, thread-safe bounded queue
- ArrayDeque: Single-threaded stack/queue, ต้องการความเร็วและ resizable