У меня есть прецедент, когда я хочу заполнять записи в структуре данных из нескольких потоков, поэтому он должен быть потокобезопасным и после достижения определенного размера начинает отбрасывать старые записи. И я также хочу перебрать структуру данных в том же порядке, что и Insertion.Существуют ли какие-либо структуры данных, которые сохраняют порядок итераций, а также отбрасывают старые записи?
Итак, я решил использовать Guava Cache
, но, к моему удивлению, метод Guava asMap()
не возвращает элементы в каком-либо конкретном порядке.
private final Cache<Integer, Integer> cache =
CacheBuilder.newBuilder().maximumSize(10)
.removalListener(
RemovalListeners.asynchronous(new CustomListener(), executorService)
).build();
cache.put(1, 1);
cache.put(2, 2);
cache.put(3, 3);
cache.put(4, 4);
cache.put(5, 5);
cache.put(6, 6);
for (Entry<Integer, Integer> entry : cache.asMap().entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
Выход:
2=2
6=6
1=1
4=4
3=3
5=5
Какой эффективная структура данных можно использовать здесь, которые могут сохранить итерационный порядок для меня, а также надежно падения старых записей, как только размер достигаются и есть некоторая обратная связь для прослушивателя удаления, где я могу выяснить, какие записи отбрасываются?
Любой пример будет полезен. Я использую Java 7 и не могу переключиться на Java 8.
Так что я должен быть в состоянии получить что-то подобное в то время как итерация, а также он должен автоматически понижаться старые записи:
1=1
2=2
3=3
4=4
5=5
6=6
Можете ли вы рассказать больше о том, как вы хотите получить доступ к элементам в структуре данных? Будет ли это в порядке? По ключевому слову? Случайно? Впереди? – templatetypedef
В том же порядке он был вставлен так, что сначала были вставлены «1 и 1», поэтому я хочу получить это во время итерации. Отредактировал вопрос. –
, так что единственный способ, которым вы когда-либо захватываете структуру данных, - это перебирать его? вы можете использовать структуру данных очереди –