У меня есть сценарий, в котором неизвестное количество потоков добавляет элементы в коллекцию на сервере. Данные в этой коллекции не нужно сортировать, и она также не будет повторяться. Только две простые операции должны работать над этой коллекции:Какую параллельную коллекцию использовать?
- Добавление элемента (и удаления старого элемента в некоторых случаях)
- Чтение всех элементов из коллекции (не один на один, но и всей коллекции, чтобы Конечно, элементы можно также перенести в другую коллекцию, которая затем сериализуется впоследствии.)
Какая коллекция будет идеально подходит для этого прецедента? Я бы выбрал ConcurrentHashMap, бу, я не знаю, хороший ли этот выбор.
Редактировать: Я забыл одно важное требование: если элемент определенного вида уже присутствует в этой коллекции и добавлен другой такой же вид, тогда старый должен быть удален до добавления нового. Для этого требования я хотел использовать хэш-значения, чтобы избежать поиска. Объекты, которые хранятся, просты: они содержат уникальное имя пользователя и некоторые строки и ints. Имя пользователя объекта должно использоваться как ключ.
Почему ConcurrentHashMap? Вы ищете пары ключ-значение? –
Если это все, что вам действительно нужно сделать, то «CopyOnWriteArrayList» выполнит эту работу; однако будьте осторожны, чтобы одна итерация создавала _new copy_ каждый раз. Таким образом, если вы ожидаете большого количества читателей, это может быть не идеальный выбор ... – fge
Согласно документу очень дорого добавлять и удалять элементы из CopyOnWriteArrayList. – user1812379