LinkedBlockingQueue偷看特定的地方

时间:2014-08-15 03:44:29

标签: java queue

我有一个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;
}

有人可能会说,如果那个地方不存在怎么办?那么它可能会等待那个地方存在。我正在使用队列而不是普通字符串,因为这是一个串行馈送,字符串必须不断更改。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有直接的方法来按索引访问项目。但你可以调用toArray(),它会返回一个数组,然后你可以访问索引位置。这样的事情。

String peekSpot(Queue<String> queue, Integer index){
    if(queue == null){
        throw new IllegalArgumentException();
    }
    Object[] array = queue.toArray();
    return (String)array[index];
}