Коллекция Java, позволяющая добавлять и удалять во время итерации

Мне интересно, есть ли какая-либо структура, которая реализует коллекцию, которая будет иметь следующее поведение.


Предположим, что он изначально содержит :[1, 2, 3]

  • Я перебираю его (с помощью итератора )и достигаю элемента 2, теперь я добавляю 4 в конец (, теперь коллекция будет [1, 2, 3, 4] ).
  • теперь я создаю новый итератор и перебираю коллекцию, в результате чего получается [1, 2, 3, 4]
  • Я продолжаю итерацию с первым итератором, и он даст мне только 3 и вернет
  • теперь сброс первого итератора даст мне [1, 2, 3, 4] (аналогично созданию нового ).

То же самое должно применяться для удаления элементов. Если я удалю 3 вместо добавления, второй итератор должен дать мне [1, 2], в то время как первый все равно даст мне 3 и конец.


Поэтому, когда я получаю итератор, я хочу, чтобы он дал мне коллекцию, которая у меня была, когда я создал итератор (, даже если я повторю его позже, я немного повторю и продолжу позже ), когда я сбрасываю итератор, он получает собранный мусор, он будет обновляться до последних версий, и я должен иметь возможность создавать несколько экземпляров итератора в разное время, которые будут давать разные версии в зависимости от содержимого массива при создании итератора.

Мне нужно, чтобы он хорошо работал с несколькими потоками и, желательно, имел эффективную реализацию.

Кто-нибудь знает о какой-либо реализации такой коллекции, или я должен реализовать ее сам?

5
задан Razvi 27 June 2012 в 13:55
поделиться