[英]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.