Мені потрібна проста черга, реалізована 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