gpt4 book ai didi

java - 循环遍历 LinkedList

转载 作者:行者123 更新时间:2023-11-30 07:02:39 26 4
gpt4 key购买 nike

我正在尝试从缓冲区类 (BufferCharacter) 获取 LinkedList,然后循环遍历 LinkedList 中的每个元素Reader 类。但是,当我尝试在 BufferCharacter 类的 get() 方法中返回 LinkedList 时,我无法在 Reader< 中循环遍历它 类。我尝试循环遍历 Buffer 类中的列表,然后从那里返回每个元素,但这也不起作用。

非常感谢任何帮助!

 public class CharacterBuffer {

private char ch;
private LinkedList buffer = new LinkedList();
private boolean filled;

public void put(char ch) {
buffer.addLast(ch);
}

public void filled() {
filled = true;
}

public Object get() throws InterruptedException {
while (buffer.isEmpty()) {
// wait();
return "Waiting";
}
return buffer;
}

public synchronized void putSync(char ch) {
buffer.addLast(ch);
}

public synchronized Object getSync() throws InterruptedException {
while (buffer.isEmpty()) {
// wait();
return "---------";
}

for(int i = 0; i<buffer.size(); i++){
System.out.println(buffer.get(i));
}

return buffer;

}

public int size(){
return buffer.size();
}

}

public class Reader extends Thread {

private GUIMutex gui;
private CharacterBuffer buffer;
private boolean isSynced;

public Reader(GUIMutex gui, CharacterBuffer buffer, boolean isSynced) {
this.gui = gui;
this.buffer = buffer;
this.isSynced = isSynced;
}

public void run() {
String data = "test";
while (true) {

try {
// data = buffer.get();
if (isSynced) {
gui.setReaderText(buffer.getSync() + "\n");
} else {
for(int i = 0; i<buffer.get().size(); i++){
gui.setReaderText(i);
}
gui.setReaderText(buffer.get() + "\n");
}
Thread.sleep(700);
} catch (InterruptedException e) {
}

}
}
}

最佳答案

我认为你不明白你在说什么;因此,让我们尝试在这里阐明一些情况。

最后,您谈论的是某种包含多个元素的“集合”类;在你的情况下是一个 LinkedList。问题是:为了使用这样的类,您需要清楚地了解您打算提供的 API。

您认为您想要使用该缓冲区来存储使用 putSync() 添加的各个字符值。

但是……getSync() 到底应该做什么?

就您而言,您只是返回缓冲区,这可能是错误

相反,您希望拥有如下方法:

synchronized boolean hasNext() 

synchronized char getNext() 

你的类的用户可以调用第一个方法来计算:是否还有其他字符;如果是,第二个方法返回这些值。

这是改进代码的第一个简单方法。更合理的方法是实现一个方法 getIterator() ,该方法将返回一个实现 Iterator 的对象。界面。

其他需要注意的事项:如果您使用的是“内置”LinkedList ;请理解该类支持泛型!

因此你应该像这样使用它:

private final List<Character> buffer = new LinkedList<>();

获得使用强类型集合的所有好处!

编辑:根据您的评论,我认为使用 LinkedList 在这里根本就是错误的方法。

您不想使用列表,而是使用 Queue ,例如:

private final Queue<Character> buffer = new ConcurrentLinkedQueue<>();

该类为您提供了一方可以在队列尾部添加元素的功能;而另一方从队列头删除元素。

额外的好处:该类已经为您完成了同步工作,因此您无需关心它!

关于java - 循环遍历 LinkedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40627471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com