ИТАК я reformated пост, чтобы сделать его немного легче понять (жаль всех pastebins, но переполнение стека был быть немым с кодом форматирования)Set <> = Sets.newHashSet()
Пожалуйста, обратите внимание, что я не намеревайтесь иметь смехотворный объем данных, хранящихся, как я заявляю ниже. Основная причина, по которой я использую сумму, которую я сказал, - выжать как можно большую эффективность.
Допустим, у меня есть следующий код (ы)
метод, который будет добавлять к DropItemQueue (начинается в заливка (с глубиной 0) другие PARAMATERS не имеет значения)
это тот же класс, и это будет вызывать метод dropItem в Utils
Мой метод Utils.dropItem выглядит следующим образом
Это метод ServerTickHandler.addDropItemQueue и его хранения переменных
Вот класс DropItemQueue
Если бы я был говорит, что добавить 100000000 элементов к этому HashSet я заметил, что она занимает около 2 секунд, чтобы
перебрать все в HashSet с помощью Этого итератора называется каждые 1/двадцатым из seccond
- секунд на итерацию не кажется много, но с таким количеством элементов, чтобы избавиться от каждого элемента, сохраненного в хэш-наборе, потребуется около 50 дней
каждый раз, когда элемент анализируется на хэшсет, maxTicks равен 1 больше, чем предыдущий добавленный el так что в основном каждые 1 секунду предмет отбрасывается, но из-за 2 секунд, чтобы перебрать все, что на самом деле занимает 3 секунды, чтобы отбросить элемент, который заставит его заняться около 150 дней, чтобы завершить итерацию и вымыть каждый элемент и завершить
мой вопрос: было бы проще иметь несколько наборов хэшей с меньшими максимальными элементами, скажем, 1000 элементов.
Да, это дало бы мне 100000 хешетах, но из-за их меньшего количества итераций время было бы медленнее (все это было бы очень небольшое повышение эффективности), или есть что-то лучшее, что я могу использовать, кроме хешета, или есть хэшеты лучше всего использовать?
не отметить, что, если я использовал несколько итераций меньших итераций я не мог использовать потоки из-за избыточности данных кросса потоков
Ваш поток программ по-прежнему неясен из того, что вы опубликовали. Можете ли вы включить более полную выборку? –
У вас действительно есть хеш-набор с 100 миллионами элементов в нем? Не удивительно, что для удаления элемента требуется некоторое время, но 2 секунды кажется ужасным. Возможно, ваша программа избивается из-за низкой физической памяти? Вы пробовали профилировать, чтобы узнать, куда идет время? Кроме того, поскольку элементы удаляются, процесс должен значительно ускориться, поэтому вы не можете оценить общее время от одного итерационного времени наихудшего случая. –
@TedHopp В реальных ситуациях у него не будет 100 миллионов элементов, но главная причина этого вопроса - повысить эффективность для больших сумм. malcom дать мне минуту и плохо реструктурировать, как работает код –