我想要一个实现固定大小循环缓冲区的简单类.它应该是高效的,容易在眼睛上,一般打字.
编辑:目前它不需要具备MT功能.我总是可以在以后添加一个锁,在任何情况下它都不会是高并发性的.
方法应该是:.Add和我猜.List,我检索所有条目.第二个想法,我认为应该通过索引器完成检索.在任何时候,我都希望能够通过索引检索缓冲区中的任何元素.但请记住,从一个时刻到下一个Element [n]可能会有所不同,因为循环缓冲区填满并翻转.
这不是一个堆栈,它是一个循环缓冲区.关于"溢出":我希望内部会有一个包含项目的数组,随着时间的推移,缓冲区的头部和尾部将围绕该固定数组旋转.但这应该是用户不可见的.应该没有外部可检测的"溢出"事件或行为.
这不是学校作业 - 它通常用于MRU缓存或固定大小的事务或事件日志.
我想知道是否有替代方案
List<X> lastN = all.subList(Math.max(0, all.size() - n), all.size());
Run Code Online (Sandbox Code Playgroud)
用流?
如果元素的总数大于X,我正在寻找一个实现Collection
并丢失最旧元素的Java类add()
.它是否存在或者我必须自己实现它?
我需要一个线程安全的.
环(循环)缓冲区和队列之间有什么区别?两者都支持FIFO所以在什么情况下我应该在队列中使用环形缓冲区为什么?
与Hadoop的相关性
映射阶段使用环形缓冲区来存储中间密钥值对.在队列中进行此选择的原因是什么?
正如标题所述,我正在寻找一个java集合,只保留插入集合中的N个最后一个对象.此FIFO集合不需要实现随机访问或支持更改N.
我能找到的所有集合都是阻塞(LinkedBlockingQueue)或无限大小(ArrayDeque).我找到了org.eclipse.jetty.util.ArrayQueue,但你可能会猜到这会给我的项目带来很多不必要的依赖,而且非常复杂,因为它支持更改N所以它不是我需要的.
你知道是否有一种方法可以使用一个非常常见的java库,或者我必须自己编写它?
我正在尝试在Java中创建一个FIFO(先进先出)数据结构,它具有有限的容量,并在没有足够空间用于新元素时删除最旧的元素.例如:
FIFO<Integer> fifo = new FIFO<Integer>(100); // 100 elements maximum
for (int i = 0; i < 500; i++) {
fifo.write(i);
}
assert fifo.read() == 400; // elements 0..399 are lost
Run Code Online (Sandbox Code Playgroud)
我是在重新发明一个轮子吗?你能推荐一些同样的库(或者也许它是JDK的一部分)吗?线程安全并不重要.
我正在尝试使用一种方法将数组的元素向左移动 n (某个随机数)。困难在于交换数组开头的元素与末尾的元素。到目前为止,这是我的代码。
其他的数组问题与这个不同。
public class Shifty {
private int[] datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
public Shifty() {
datas = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
}
public int shift(int position) {
int tmp = 0;
int[] tmp1 = new int[12];
for (int i = 0; i <= 12; i++) {
if (i < position) {
tmp1[12-position] = this.datas[i];
} else …
Run Code Online (Sandbox Code Playgroud) java ×6
arrays ×1
c# ×1
class-design ×1
collections ×1
hadoop ×1
hadoop2 ×1
java-8 ×1
java-stream ×1