Comments 5
calculateShift можно ускорить.
Вот тут несколько способов как это сделать.
Не считая банальной замены двух сравнений на сравнение с минимумом двух параметров.
Вот тут несколько способов как это сделать.
Не считая банальной замены двух сравнений на сравнение с минимумом двух параметров.
+1
Спасибо вам за ссылку! Попробую копнуть в этом направлении.
0
Как-то так:
protected static int calculateShift(int minimumValue, int maximumValue) {
int target = Math.min(minimumValue, maximumValue);
if (target > 1)
return Integer.highestOneBit(target - 1) << 1;
else
return 1;
}
+1
У вас возвращается старший бит, оригинальный метод возвращает его позицию.
Например для 7 вы вернете 8, а надо 3.
Правильная реализация будет выглядеть примерно так.
Например для 7 вы вернете 8, а надо 3.
Правильная реализация будет выглядеть примерно так.
int calculateShift(int minimumValue, int maximumValue) {
int target = Math.min(minimumValue, maximumValue);
return 32-Integer.numberOfLeadingZeros(target);
}
+1
Да, действительно. Тогда вот так (а если ни один из аргументов не может быть нулем, то еще проще):
protected static int calculateShift(int minimumValue, int maximumValue)
{
int target = Math.min(minimumValue, maximumValue);
if (target > 0)
return 32 - Integer.numberOfLeadingZeros(target - 1);
else
return 0;
}
+1
Sign up to leave a comment.
Ускоряем создание ConcurrentReferenceHashMap