相关疑难解决方法(0)

您将如何使用Java或C#编写高效的循环缓冲区?

我想要一个实现固定大小循环缓冲区的简单类.它应该是高效的,容易在眼睛上,一般打字.

编辑:目前它不需要具备MT功能.我总是可以在以后添加一个锁,在任何情况下它都不会是高并发性的.

方法应该是:.Add和我猜.List,我检索所有条目.第二个想法,我认为应该通过索引器完成检索.在任何时候,我都希望能够通过索引检索缓冲区中的任何元素.但请记住,从一个时刻到下一个Element [n]可能会有所不同,因为循环缓冲区填满并翻转.

这不是一个堆栈,它是一个循环缓冲区.关于"溢出":我希望内部会有一个包含项目的数组,随着时间的推移,缓冲区的头部和尾部将围绕该固定数组旋转.但这应该是用户不可见的.应该没有外部可检测的"溢出"事件或行为.

这不是学校作业 - 它通常用于MRU缓存或固定大小的事务或事件日志.

c# java class-design

43
推荐指数
3
解决办法
7万
查看次数

从流中获取最后n个元素

我想知道是否有替代方案

List<X> lastN = all.subList(Math.max(0, all.size() - n), all.size());
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

28
推荐指数
2
解决办法
1万
查看次数

在add()上丢失最旧元素的集合

如果元素的总数大于X,我正在寻找一个实现Collection并丢失最旧元素的Java类add().它是否存在或者我必须自己实现它?

我需要一个线程安全的.

java

7
推荐指数
1
解决办法
4091
查看次数

环形缓冲区和队列之间的区别

环(循环)缓冲区和队列之间有什么区别?两者都支持FIFO所以在什么情况下我应该在队列中使用环形缓冲区为什么?

与Hadoop的相关性

映射阶段使用环形缓冲区来存储中间密钥值对.在队列中进行此选择的原因是什么?

hadoop data-structures hadoop2

5
推荐指数
2
解决办法
8868
查看次数

Java集合仅保留最后插入的成员

正如标题所述,我正在寻找一个java集合,只保留插入集合中的N个最后一个对象.此FIFO集合不需要实现随机访问或支持更改N.

我能找到的所有集合都是阻塞(LinkedBlockingQueue)或无限大小(ArrayDeque).我找到了org.eclipse.jetty.util.ArrayQueue,但你可能会猜到这会给我的项目带来很多不必要的依赖,而且非常复杂,因为它支持更改N所以它不是我需要的.

你知道是否有一种方法可以使用一个非常常见的java库,或者我必须自己编写它?

java collections

4
推荐指数
1
解决办法
915
查看次数

容量有限的FIFO缓冲区可覆盖最旧的元素

我正在尝试在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的一部分)吗?线程安全并不重要.

java data-structures

3
推荐指数
1
解决办法
477
查看次数

将数组中的元素循环移位 n

我正在尝试使用一种方法将数组的元素向左移动 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 arrays

2
推荐指数
1
解决办法
1442
查看次数