我每隔几毫秒就有一个网络数据流。我需要删除第一个元素,并在发生这种情况时将一个元素添加到固定大小列表的末尾(即“移位”)。这些元素是简单的float
。
我应该使用什么数据结构,有使用示例吗?
最佳答案
您有多种选择。最简单的当然是使用 Queue
,Java 为您提供了一些实现( arrayblocking 、 concurrentlinked )。您可以覆盖其中任何一个来添加移位方法:
public E shift(E newElement) {
E old = take();
put(newElement);
return old;
}
为了确保线程安全,您需要一些同步。
如果出于某种原因您更喜欢其他集合,那也是可能的。请注意,这些可能不是线程安全的。我不会使用 ArrayList,因为它的复杂性相当差,但 LinkedList 应该没问题。覆盖它需要这种转变:
public E shift(E newElement) {
E old = getFirst();
addLast(newElement);
return old;
}
只要只使用shift方法,就可以确定固定大小。如果你想强制它,你将不得不重写更多方法,或者使用委托(delegate)者。
关于Java队列固定大小的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21369261/