我有一个LinkedBlockingQueue
,我想检查队列中是否有一定顺序的元素而不删除这些元素。我希望有一种可以用来窥视队列中特定位置的方法。例如,queue.peekSpot(0)
将返回头部,而quque.peekSpot(queue.size())
将返回尾部。现在我有了这种方法,但是它删除了正在读取的内容。顺便说一句,队列是char
类型。
public boolean checkString(String string) {
if (string.length() < 1) {
return true;
}
char input = queue.take();
if (input == string.charAt(0)) {
return checkString(string.substring(1));
}
return false;
}
如果可以使用
peekSpot()
方法,则可以按以下步骤进行操作,从而大大简化了代码。public boolean checkString(String string){
for(int i = 0; i < string.length(); i++){
if(!(string.charAt(i) == queue.peekSpot(i))){
return false;
}
}
return true;
}
有人会说,如果那个地方不存在怎么办?好吧,它可能会等待该位置存在。我使用队列而不是普通字符串,因为这是串行提要,并且字符串必须不断更改。有任何想法吗?
最佳答案
没有直接的方法,即按索引访问项目。但是您可以调用toArray()
,这将返回一个数组,然后您可以访问索引位置。这样的东西。
String peekSpot(Queue<String> queue, Integer index){
if(queue == null){
throw new IllegalArgumentException();
}
Object[] array = queue.toArray();
return (String)array[index];
}