Мені потрібна проста черга, реалізована FIFO, для зберігання купу ints (я не сильно проти, якщо це загальна реалізація).
Що-небудь вже спечене для мене в java.util
бібліотеці Trove / Guava?
Мені потрібна проста черга, реалізована FIFO, для зберігання купу ints (я не сильно проти, якщо це загальна реалізація).
Що-небудь вже спечене для мене в java.util
бібліотеці Trove / Guava?
Відповіді:
Так. Чергу
LinkedList - найбільш тривіальна конкретна реалізація.
LinkedList
LinkedList
не є інтерфейсом; це явний клас. З іншого боку, ArrayDeque
це часто швидше.
Ось приклад коду використання вбудованої черги FIFO в Java:
public static void main(String[] args) {
Queue<Integer> myQ = new LinkedList<Integer>();
myQ.add(1);
myQ.add(6);
myQ.add(3);
System.out.println(myQ); // 1 6 3
int first = myQ.poll(); // retrieve and remove the first element
System.out.println(first); // 1
System.out.println(myQ); // 6 3
}
ArrayDeque
це, мабуть, найшвидша об'єктна черга в JDK; Trove має TIntQueue
інтерфейс, але я не знаю, де живуть його реалізації.
ArrayDeque
функціонувати як черга (FIFO), а не стек (LIFO), вам слід використовувати add
і remove
. Якщо ви використовуєте push
і pop
, він поводиться як стек. (Строго кажучи, remove
і pop
однакові, але оскільки пари звучать add/pop
або push/remove
не звучать добре, ми йдемо з add/remove
та push/pop
.)
Queue
- це інтерфейс, який розширюється Collection
в Java. Він має всі функції, необхідні для підтримки FIFO
архітектури.
Для конкретного втілення ви можете використовувати LinkedList
. LinkedList реалізує, Deque
що в свою чергу реалізує Queue
. Все це є частиною java.util
пакету.
Для отримання детальної інформації про метод із зразком прикладу ви можете звернутися до реалізації черги на основі FIFO в Java .
PS: Вище посилання йде на мій особистий блог, де є додаткові відомості про це.
LinkedList може бути використаний в якості черзі - але ви повинні використовувати його правильно. Ось приклад коду:
@Test
public void testQueue() {
LinkedList<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
System.out.println(queue.pop());
System.out.println(queue.pop());
}
Вихід:
1
2
Пам'ятайте , якщо ви використовуєте push замість add (що ви, швидше за все, будете робити інтуїтивно), це додасть елемент в передній частині списку, змушуючи його поводитися як стек.
Отже, це Черга, лише якщо вона використовується разом із add.
Спробуйте це :
@Test
public void testQueue() {
LinkedList<Integer> queue = new LinkedList<>();
queue.push(1);
queue.push(2);
System.out.println(queue.pop());
System.out.println(queue.pop());
}
Вихід:
2
1