java - LinkedBlockingQueue 查看特定位置

标签 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;
}

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

最佳答案

没有直接的方法,即通过索引访问项目。但您可以调用 toArray(),它会返回一个数组,然后您可以访问索引位置。像这样的东西。

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

关于java - LinkedBlockingQueue 查看特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320955/

相关文章:

java - 如何构造一个需要非常量堆的类

c - 与消息队列相关的问题

java - 如何为 JTree 上的各个节点设置自定义图标?

java - AWSIotException : Cross account not allowed when trying to attach policy

java - 解码简单的 XML

elasticsearch - 如何检查 threadpool.XXX.queue_size 中定义的 ealastisearch 队列的当前大小?

Python多处理队列内存管理

python 队列、SimpleQueue、task_done

java - 更新以昵称为主键的表的行

java - 从枚举返回计算值