Java 如何制作循环缓冲区?

Java 如何制作循环缓冲区?,java,buffer,Java,Buffer,我必须为类从数组中生成一个循环缓冲区,我不能完全理解这个概念是如何实现的。我知道有些索引是来回的,但我真的不明白这是如何实现的。您甚至如何为数组的元素分配尾部或头部,或以两种方式对它们进行索引?任何建议、代码或解释都是非常有用的。 循环缓冲区基本上是一个数组和两个整数,它们跟踪您认为是“尾部”和“头”的位置。 空缓冲区以“tail”和“head”在同一索引处开始(0是一个很好的选择) 添加到缓冲区时,在“尾部”点添加的位置插入,然后将尾部移动到下一个位置。它是“圆形”的,因为当“尾部”从数组的末

我必须为类从数组中生成一个循环缓冲区,我不能完全理解这个概念是如何实现的。我知道有些索引是来回的,但我真的不明白这是如何实现的。您甚至如何为数组的元素分配尾部或头部,或以两种方式对它们进行索引?任何建议、代码或解释都是非常有用的。

循环缓冲区基本上是一个数组和两个整数,它们跟踪您认为是“尾部”和“头”的位置。

空缓冲区以“tail”和“head”在同一索引处开始(
0
是一个很好的选择)

添加到缓冲区时,在“尾部”点添加的位置插入,然后将尾部移动到下一个位置。它是“圆形”的,因为当“尾部”从数组的末尾脱落时,它会跳回到它的开头(索引0)


类似地,通过查看和调整相应的位置,可以从缓冲区的头部或尾部移除。

通过将结构的
尾部连接到其
头部,可以使结构成为圆形。在数组中,这可以通过多种不同的方式(迭代器、自定义类/处理程序等)完成,但它们的共同点是
尾部之后的
下一个
元素是
头部

下面是一个非常简单的示例,它使用
%
操作符来处理从尾部到头部的“连接”:

int[] ary = {0, 3, 5};

for(int i = 0; i < 100; i++) {
    System.out.println(ary[i % 3]);
}
int[]ari={0,3,5};
对于(int i=0;i<100;i++){
System.out.println(ari[i%3]);
}
此循环将输出: 0 3. 5. 0 3. 5. 0 3.
5……在100次迭代中

继续查看其他参考资料,可能是维基百科上的图形参考资料。因此,尾巴脱落是指你会将其置于头部?因为头部不总是索引0吗?当尾部超出数组的末尾时,它从
0
开始。只有在从不从缓冲区头部取出东西时,头部才会保持在
0
。否则,头部会“向后”移动。当尾巴赶上头部时,缓冲区已满。您可以选择允许这样做(即覆盖现有元素),或者使用exeption(“缓冲区已满”)中止。