2012-03-06 51 views
0

我有一個包含兩個long,一個float和一個BigDecimal的類的私有數組列表。隨着新數據的進入,我目前正在移除最舊的元素,移除所有其他元素,然後添加最新的元素。我認爲這會佔用很多內存。所以無論如何要做這個循環,所以我不需要移動數組中的元素?swith到圓形列表以便更易於轉換

我會包括下面我的代碼relevenat部分:

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); 
} 
+2

你有沒有考慮使用隊列,而不是一個列表? – assylias 2012-03-06 15:34:29

+0

沒有鏈接列表足以達到這個目的嗎?如果我沒有記錯,它對插入/刪除操作有很好的性能。 – kosa 2012-03-06 15:34:52

回答

2

聽起來像你想在Java中實現的隊列中。閱讀this

Java還提供了一種可作爲一個隊列可以容易地實現的LinkedList類。 Here's an example.

1

爲什麼不使用先進先出的數據結構,如Queue就像LinkedList?這將允許您添加在隊列的後面,並從前面刪除。這兩項行動將持續不斷。

1

如果我的理解問題的權利,你必須看到隊列類,我覺得它更有效地工作在幕後。 (http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html)

或者你可以使用array和mod操作(但它會是一個圓圈,而不是隊列) :

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

和使用添加下一個代碼:

privStats[i]=newStat; 
i=(++i) % 10;