2012-06-02 2 views
3

Мне интересно, почему размер по умолчанию PriorityQueue in Java равен 11. Я посмотрел на implementation, и это сделало меня более запутанным.Размер по умолчанию приоритетной очереди в java

Очередь приоритетов реализована как куча. Его мощность регулируется с помощью этой функции:

/** 
* Increases the capacity of the array. 
* 
* @param minCapacity the desired minimum capacity 
*/ 
private void grow(int minCapacity) { 
    if (minCapacity < 0) // overflow 
     throw new OutOfMemoryError(); 
    int oldCapacity = queue.length; 
    // Double size if small; else grow by 50% 
    int newCapacity = ((oldCapacity < 64)? 
         ((oldCapacity + 1) * 2): 
         ((oldCapacity/2) * 3)); 
    if (newCapacity < 0) // overflow 
     newCapacity = Integer.MAX_VALUE; 
    if (newCapacity < minCapacity) 
     newCapacity = minCapacity; 
    queue = Arrays.copyOf(queue, newCapacity); 
} 

Я не понимаю, начальное значение 11 для емкости. Я думаю, что емкость должна всегда быть 2 до количества уровней. Любые разъяснения?

+0

11, вероятно, самый маленький размер, при котором приоритетная очередь имеет преимущество перед последовательной структурой данных. – EJP

ответ

3

11, вероятно, это число, которое было выбрано более или менее произвольно, в качестве компромисса между потреблением памяти (слишком большое количество потребляло слишком много памяти ни для чего) и потреблением ЦП (слишком низкое число было бы слишком большим изменение размера очереди). И они, вероятно, сравнивали типичные варианты использования, чтобы выбрать этот номер и стратегию, используемую для изменения размера очереди.

+0

Если размер кучи равен 11, нам потребуется 4 последовательных ввода/удаления, чтобы изменить количество уровней в куче. Поэтому 11 - лучший вариант в этом отношении между [8, 15]. Тем не менее, эта линия мышления не масштабируется для других ценностей. –

Смежные вопросы