[英]Error linkedlist peek() not null and size() =0
import java.util.LinkedList;
public LinkedList<String> mylinkedlist;
/*...*/
System.out.println("STRING: "+ mylinkedlist.peek() +" SIZE: "+ mylinkedlist.size());
输出
字符串:blablabla 大小:0
这是一个调试问题:如何peek()
返回值和列表大小为 0 ?
编辑 2 月 25 日 - 错误再次出现
错误 :
java.util.NoSuchElementException
at java.util.LinkedList.removeFirst(LinkedList.java:270)
at java.util.LinkedList.pop(LinkedList.java:801)
at GrblCommunicator.streamCommands(GrblCommunicator.java:164)
at GrblCommunicator.responseMessage(GrblCommunicator.java:234)
at ResponseMessageHandler.handleResponse(ResponseMessageHandler.java:33)
at SerialConnectionJserial.serialEvent(SerialConnectionJserial.java:114)
at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener.waitForSerialEvent(SerialPort.java:1387)
at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener$1.run(SerialPort.java:1300)
at java.lang.Thread.run(Thread.java:748)
编码 :
import java.util.LinkedList;
/*...*/
public volatile LinkedList<String> commandBuffer;
public void streamCommands() {
if (this.commandBuffer.size() == 0) {
// NO-OP
return;
}
if (this.sendPaused) {
// Another NO-OP
return;
}
while (CommUtils.checkRoomInBuffer(this.sentBufferSize, this.commandBuffer.peek())
&& allowMoreCommands()) {
if(this.commandBuffer.size()==0) {
System.out.println("ERROR DE COMMAND BUFFER SIZE GrblComm 155: ");
return;
}
else
{
String commandString = this.commandBuffer.pop();
第 164 行是:this.commandBuffer.pop();
我不明白这个错误,因为有一个 this.commandBuffer.size() 测试!!!!!!
请给我解释一下!!!
编辑 2 月 25 日
我要尝试用 ConcurrentLinkedDeque 替换 LinkedList
编辑 2 月 26 日
同样的错误:
java.util.NoSuchElementException
at java.util.concurrent.ConcurrentLinkedDeque.screenNullResult(ConcurrentLinkedDeque.java:810)
at java.util.concurrent.ConcurrentLinkedDeque.removeFirst(ConcurrentLinkedDeque.java:990)
at java.util.concurrent.ConcurrentLinkedDeque.pop(ConcurrentLinkedDeque.java:1036)
at GrblCommunicator.streamCommands(GrblCommunicator.java:167)
at GrblCommunicator.responseMessage(GrblCommunicator.java:240)
at ResponseMessageHandler.handleResponse(ResponseMessageHandler.java:33)
at SerialConnectionJserial.serialEvent(SerialConnectionJserial.java:114)
at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener.waitForSerialEvent(SerialPort.java:1391)
at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener$1.run(SerialPort.java:1295)
您无法查看 LinkedList 中的项目并且使其大小为零。 想想你在说什么 - “我怎么能看这个值,让列表没有值?”。 这样做的原因是peek()
检索列表中的第一项但不删除它。 但是,您可能正在寻找pop()
。 使用pop()
您可以同时检索和删除第一项。 根据此处的文档“从此列表表示的堆栈中弹出一个元素。换句话说,删除并返回此列表的第一个元素”。
LinkedList<String> myList = new LinkedList<>();
myList.add("blablabla");
System.out.println("String: " + myList.pop() + ", Size: " + myList.size());
这打印出来:
String: blablabla, Size: 0
如果您绝对需要在大小为 0 时返回一个值,您有几个选择。
LinkedList
实现.peek()
之前检查链表的大小,如果大小为 0,则返回适当的值而不是调用.peek()
如果不是 0,则继续调用。java.util.LinkedList 的 peak() 方法的实现表示“检索但不删除此列表的头部(第一个元素)。”
所以使用 java.util.LinkedList 是不可能的。
您可能已经从“java.util.LinkedList”以外的其他库中导入了 LinkedList
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.