В реализации PriorityQueueImpl
каждый уровень приоритета содержит массив очередей, где каждая очередь представляет собой список элементов с одинаковым временем интервала (по умолчанию это одна секунда). Какие преимущества имеет такое решение? Почему не используется одна очередь на каждый уровень приоритета?
При обновлении уровня приоритета в текущих условиях происходит следующее: если количество вызовов методов poll
и remove
достигает значения maxSize
, то происходит повышение уровня приоритета. После завершения этого процесса значение callTimes
не сбрасывается. Это приводит к следующим ситуациям:
2.1 Когда уровень приоритета был недавно повышен, если после этого больше не будут вызываться методы poll
или remove
, то каждый последующий вызов метода offer
будет приводить к повторному повышению уровня приоритета (значение callTimes
остаётся равным maxSize
).
2.2 Когда уровень приоритета был недавно повышен, если после этого хотя бы один раз будет вызван метод poll
или remove
, то дальнейшие вызовы метода offer
уже не будут приводить к повышению уровня приоритета (значение callTimes
увеличивается, теперь оно больше maxSize
).