1) Порядок вставки объекта должен быть
хранится
Это любая "нормальная" структура данных - массив, arrayList, дерево. Поэтому избегайте самобалансирующихся или самосортирующихся структур данных: кучи, хеш-таблицы или деревья перемещения на передний план (например, splay-деревья). Опять же, вы можете использовать одну из этих структур, но Вы должны отслеживать его порядок вставки в каждом узле.
2) Объект должен быть уникальным (это
объекты базы данных, которые уникально
идентифицируется UUID).
Сохраняет уникальный идентификатор, связанный с каждым объектом. Если это программа на C, то указатель на этот узел уникален (я полагаю, что это применимо и к Java). Если указатель узла недостаточен для поддержания «уникальности», то вам нужно добавить поле к каждому узлу, который Вы гарантированно имеете уникальную ценность.
3) Если более новый объект с тем же идентификатором
добавлена более старая версия
объект должен быть переписан / удален
Где вы хотите разместить узел? Вы хотите заменить существующий узел? Или вы хотите удалить старый узел, а затем добавить новый в конец? Это важно, потому что это связано с вашим требованием # 1, где порядок вставки должен быть сохранен.
4) Решение должно быть доступно
по многим темам.
Единственный способ, которым я могу придумать, это реализовать какую-то блокировку. Java позволяет заключать структуры и код в блок synchronized
.
5) Когда первый объект добавлен в
Структура читается / используется, она должна быть
удалено из структуры данных
Вроде как операция "dequeue".
Похоже, ArrayList - довольно хороший вариант для этого: просто из-за # 5. Единственная проблема заключается в том, что поиски являются линейными. Но если у вас сравнительно небольшой объем данных, это не такая уж большая проблема.
В противном случае, как говорили другие: HashMap или даже какое-то Дерево будет работать, но это будет зависеть от частоты обращений. (Например, если к «самому последнему» элементу наиболее вероятно получить доступ, я бы использовал линейную структуру. Но если доступ будет иметь «случайные» элементы, я бы использовал HashMap или Tree.)