Какую структуру данных использовать для решения задачи?
Программа получает поток значений типа int. Через какое-то время данные перестают поступать. Заранее не известно когда прекратится поступление данных, т.е. количество полученных значений типа int неизвестно. Количество полученных значений может колебаться от нескольких единиц (5-10) значений до нескольких сотен (100-900) значений. Программа должна сохранить последние 20-ть полученных значений. Эти сохранённые 20-ть значений должны быть расположены в той же последовательности как и были получены. Сортировать их НЕ нужно. Нужна только возможность прочесть значения в том же порядке.
Если я буду использовать Array[20] int то при каждом получении нового значения мне нужно будет все предыдущие 20 значений передвигать на один элемент левее в массиве. Т.е. при получении одного элемента программа должна выполнить 20 присваиваний. Мне кажется, что это слишком затратный метод. Может быть есть структура данных более подходящая для данной задачи, чем Array[20]? Нужна структура похожая на очередь из 20 элементов. Справа появляется новый элемент и выталкивает все находящиеся элементы на один индекс влево. А самый левый элемент вообще выталкивается из структуры. Подскажите, какой структурой воспользоваться или, может быть, Array[20] это нормальный вариант?
Ответы (1 шт):
Возьмите готовую реализацию очереди с лимитом количества: EvictingQueue из Google Guava:
EvictingQueue<Integer> myQueue = EvictingQueue<Integer>.create(20);
for(int i=0; i < 100; i++) //пихаем 100 элементов
myQueue.add(i);
Iterator<Integer> it = myQueue.iterator();
while(it.hasNext()) //смотрим теперь контент списка - сколько осталось
System.out.println("Queue content #"+it.next());