0

我有一个私有数组列表,其中包含两个 long、一个浮点数和一个 BigDecimal 类。随着新数据的到来,我目前正在删除最旧的元素,将所有其他元素移过来,然后添加最新的元素。我认为这会不必要地占用大量内存。那么有没有办法把它变成一个圆圈,所以我不需要移动数组中的元素?

我将在下面包含我的代码的相关部分:

private ArrayList<privStat> MyList = new ArrayList<privStat>();
public class privStat {
   long Stat1;
   long Stat2;
   float Stat3;
   BigDecimal Stat4;
}

NewStat = new privStat(//new message)
if (MyList.size() - 1 < 10) {
   MyList.add(NewStat);
} else {
   Mylist.remove(0);
   Mylist.add(NewStat);
}
4

3 回答 3

2

听起来您正在尝试在 Java 中实现队列。读这个

Java 还提供了一个可以轻松实现为队列的 LinkedList 类。 这是一个例子。

于 2012-03-06T15:35:41.030 回答
1

Queue为什么不使用诸如like之类的先进先出数据结构LinkedList?这将允许您在队列的后面添加,并从前面删除。这两个操作都需要固定的时间。

于 2012-03-06T15:36:35.290 回答
1

如果我对问题的理解正确,您必须查看 Queue 类,我认为它在幕后更有效地工作。(http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html)

或者您可以使用数组和 mod 操作(但它将是一个圆圈,而不是队列):

PrivStat[] privStats=new PrivStat[10]();
int i=0;

并使用下一个代码添加:

privStats[i]=newStat;
i=(++i) % 10;
于 2012-03-06T15:44:32.150 回答