Ответы пользователя по тегу Алгоритмы
  • Какой правильный класс коллекции для хранения сортируемого списка?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Не сказано главного: какого размера map ? т е сколько объектов ? десятки, сотни, десятки тысяч ?
    Второе, что не сказано - с какой частотой надо принудительно обновлять, и с какой частотой валятся события на обновление. Одно дело раз в 20мс другое дело раз в минуту. Либо же надо поддерживать эту структуру сортированной при любом обновлении ?
    Wataru вам предлагает вполне ризонно список использовать. Если у вас ключ - это время, то вам мап не нужен вообще. Возьмите очередь (Deque) и пихайте только что обновленный объект в конец.
    Для принудительного обновления: берете первые 4 из очереди и раздаете в потоки.
    Для обновления по событию: придется сначала найти объект в очереди. Для этого пройтись по ней итератором. Это позволяет, например, ConcurrentLinkedDeque Итератор там потокобезопасен, но не итерирует вставки, которые были после взятия итератора. Т е может быть такой момент, что пока вы итерируете, придет ещё одно событие и всунет вам новый объект который в итератор не попадет. Либо ваш поток обновит порядок, а итератор этого не увидит, поэтому приходящее событие нужно будет ручками синхронизировать с выдачей элементов на принудительное обновление. И что-то лучшее боюсь тут сложно придумать. Дайте больше информации о масштабах задачи. Если объектов много, то возможно вместо простой очереди использовать какой-нибудь TreeMap или ещё что-то такое, где есть доступ по индексу.
    Ответ написан
  • Чем организовать очередь с возможностью поиска?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    То что было в очереди должно сохраняться ? Вроде 10000 записей - это не очень много и можно в памяти держать. Банально написать свою реализацию кольцевого буфера. При этом вынимаемый из середины элемент не удалять, а пометить как прочитанный, что бы когда до него дойдёт указатель конца, он его тупо пропустил.
    Ответ написан
    Комментировать