Неизменяемый список JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Неизменяемый список Java

Сообщение Anonymous »

В настоящее время я создаю кэш LRU, в котором мне нужно хранить N последних вставленных элементов. Элементы будут вставляться часто (т. е. много операций записи), а операции чтения обычно возвращают большое количество событий, всегда строго последовательно, хотя и начиная с произвольной точки в кэше. Например, предположим, что кэш содержит события:

Код: Выделить всё

[1, 2, 3, 4, 5, 6]
Правильной операцией чтения будет возврат итератора по событиям [2, 3, 4].

Поскольку операции чтения потенциально долговечны, я бы хотел использовать структуру данных, в которой я мог бы безопасно перебирать логическую копию последовательности для каждой попытки чтения, тем самым предотвращая кэширование. читать, не задерживая любые последующие записи. Однако использование стандартного Java ArrayList или LinkedList требует больших затрат на создание полной копии.

Мой вопрос: есть ли какие-либо сторонние Библиотеки Java, которые предоставляют неизменяемые структуры данных, аналогичные Scala, при этом попытки изменить структуру данных возвращают новую неизменяемую копию (которая фактически основана на исходной структуре данных и, следовательно, операция копирования выполняется очень быстро). ? Очевидно, что структура данных не может соответствовать API коллекций Java, поскольку такие операции, как add(T), должны будут возвращать новую коллекцию (а не void).

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

Заранее спасибо.

Примечание

ImmutableList Guava почти достигает того, что мне нужно: он позволяет вам вызывать copyOf, где копия обычно ссылается на оригинал (избегая фактического копирования). К сожалению, вы не можете пойти другим путем и добавить элемент в список и получить копию, содержащую новый элемент.

Подробнее здесь: https://stackoverflow.com/questions/661 ... table-list
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»