[英]What kind of data structure to use (fixed length)?
如果我有以下问题,我想知道应该使用哪种数据结构(队列):
这样做的目的是要有一个固定宽度的数据源,图形将对其进行扫描以绘制其曲线。
编辑:此图旨在显示在Android自定义视图上。 我可以使用特定的长度来使循环更快吗?
编辑2:添加了“添加新值时, 如果队列已满 ,则删除第一个值。如果我将30个新值添加到已满队列 ,则自动删除30个值。”
如果堆栈的容量永远不会改变,我将使用一个数组。 我将跟踪“第一个”节点的位置,并继续对其进行环绕。
我还想指出,您的行为似乎更像是队列而不是堆栈。 您确定堆栈是您想要的吗?
class RotatingQueue<E> {
Object[] data; // can't do E[]
final int maxSize;
int size = 0; // starts empty
int first = 0; // starts at the front, why not?
RotatingQueue(int size) {
this.maxSize = size;
data = new Object[size];
}
E add(E e) {
E old = (E)(data[first]);
old[first++] = e;
if(size < maxSize) size++;
return old;
}
}
您绝对需要带有模块化访问权限的循环缓冲区 -基于数组的队列。 您可以轻松地修改实现以删除第一个元素,而不是引发异常。
请参阅ArrayBlockingQueue: http : //download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ArrayBlockingQueue.html
我建议将LinkedHashSet用于唯一项或ArrayList。
听起来您需要... 一个堆栈 !
不,我只是在开玩笑。 “堆栈”在这里并不是正确的术语,因为堆栈是“后进先出”的,这意味着您将内容添加到顶部,然后以相反的顺序将其取下。
您真正需要的是Deque实现。 这是一个队列,允许在两端插入和删除。 我将假设仅在队列已满时才需要删除值。 您的描述并不清楚。 如果在插入新值时总是删除值,那么最终将得到一个数据结构,该数据结构在任何时候都只有一个元素。
我不知道自动限制项目数量的实现。 ArrayDeque非常接近,但是您仍然需要检查插入的大小并从一开始就删除多余的元素。 它提供了Java集合的典型iterator
方法,使您可以遍历项目。 对于这种类型的集合,可以保证订购。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.