0

float と BigDecimal の 2 つの long を含むクラスを持つプライベート配列リストがあります。新しいデータが入ってくると、現在、最も古い要素を削除し、他のすべての要素をシフトしてから、最新の要素を追加しています。これは不必要に多くのメモリを占有していると思います。とにかくこれを円にする方法はあるので、配列内の要素をシフトする必要はありませんか?

以下に、コードの関連部分を含めます。

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 クラスを確認する必要があります。裏でより効率的に機能していると思います。(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 に答える
1

Queuelikeのような先入れ先出しのデータ構造を使用しないのはなぜLinkedListですか? これにより、キューの最後に追加し、前から削除できます。どちらの操作にも一定の時間がかかります。

于 2012-03-06T15:36:35.290 に答える