我每隔幾ms就會有一組網絡數據流。我需要刪除第一個元素,並在發生這種情況時將一個元素添加到固定大小列表的末尾(即「shift」)。元素很簡單float
s。固定大小的Java隊列數據結構
我應該使用哪種數據結構,並且有一個示例用法?謝謝。
我每隔幾ms就會有一組網絡數據流。我需要刪除第一個元素,並在發生這種情況時將一個元素添加到固定大小列表的末尾(即「shift」)。元素很簡單float
s。固定大小的Java隊列數據結構
我應該使用哪種數據結構,並且有一個示例用法?謝謝。
你有幾個選擇。當然最簡單的方法就是使用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;
}
只要你只使用移位方法,你可以肯定的是固定的大小。如果你想強制它,你將不得不覆蓋更多的方法,使用委託人。
我不完全知道你想從這個不斷變化的隊列中訪問數據,但我建議一個LinkedBlockingQueue<Float>
或ArrayBlockingQueue<Float>
以及一個線程來等待&進程輸入。您可以從任何線程(例如您的網絡線程)向隊列添加元素,並在元素可用時處理這些元素。這樣,您可以保證不會丟失任何與當前方法不同的數據(因爲除非您在數據處理過程中防止寫入,否則如果寫入的元素多於處理的元素,數據將會丟失)。