Если myQueue
является экземпляром стандартного Java-класса, реализующего интерфейс Queue
, вероятность того, что вы обнаружите ошибку с ним, ... ну, достаточно близка к нулю, чтобы мы могли исключить ее как возможность .
Если, с другой стороны, вы внедрили свою собственную очередь, тогда, да, вполне может быть проблема, но, поскольку психическая отладка еще не является устоявшейся областью деятельности, вы нам нужно будет показать нам код для этого: -)
Я вижу одну из двух возможностей. Во-первых, вы каким-то образом устанавливаете для каждого узла своей очереди одно и то же значение, и вы вполне можете удалять элементы в порядке (вы можете обнаружить это, добавив один элемент, а затем пытаясь удалить два). Это гораздо более вероятно в языке, подобном C, где вы можете случайно использовать один и тот же указатель, но гораздо менее вероятно в Java с его улучшенными строками.
Вторым и наиболее вероятным является то, что вы не удаляете элемент из очереди при вызове remove
, скорее вы возвращаете строку без корректировки независимо от того, какая у вас базовая структура данных (или альтернативно корректирую его неправильно).
Если не считать код, это примерно так же хорошо, как я могу.
После вашего обновления о том, что вы действительно используете LinkedList
, я решил попробовать его на очень простом примере xx.java
:
import java.util.LinkedList;
import java.util.Queue;
public class xx {
public static void main (String args[]) {
Queue<String> myQueue = new LinkedList<String>();
myQueue.add ("abc");
myQueue.add ("def");
System.out.println (myQueue.size());
System.out.println (myQueue.remove());
System.out.println (myQueue.size());
System.out.println (myQueue.remove());
System.out.println (myQueue.size());
try {
System.out.println (myQueue.remove());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Это выводит:
2
abc
1
def
0
java.util.NoSuchElementException
at java.util.LinkedList.remove(LinkedList.java:805)
at java.util.LinkedList.removeFirst(LinkedList.java:151)
at java.util.LinkedList.remove(LinkedList.java:498)
at xx.main(xx.java:14)
как и ожидалось.
Итак, суть в том, что я думаю, что нам нужно увидеть больше вашего кода. Трудно представить, что если бы было ошибкой в LinkedList
или Queue
интерфейсе, миллионы других пользователей еще не нашли бы его: -)
Вы также хотите попробовать поставить строку System.out.println (myQueue.size());
в нескольких стратегических местах в вашем коде, чтобы увидеть, что происходит с очередью. Это может дать вам представление о том, что происходит.