Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
java.lang.IllegalArgumentException: Comparison method violates its general contract!
$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
>>> 0.0
0.0
>>> -0.0
-0.0
>>> 1*(-0.0)
-0.0
>>> 1*(+0.0)
0.0
>>> max(-0.0,0.0)
-0.0>>> sorted([10.0,5.0,float('nan'),3.0,4.0,2.0,8.0,7.0,1.0,9.0,6.0])
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 10.0, nan, 7.0, 8.0, 9.0]>>> float('nan')
nan
>>> float('nan') > 0
False
>>> float('nan') < 0
False
>>> float('nan') == float('nan')
False
>>> from math import isnan
>>> isnan(float('nan'))
True
>>> max(float('nan'),0)
nan
>>> max(0,float('nan'))
0
>>> min(float('nan'),0)
nan
>>> min(0,float('nan'))
0double diff = d - o.d;
return diff < 0 ? -1 : diff > 0 ? 1 : 0;
return (int)(d-o.d)).Можно было подуматьПочему нельзя? Именно так бы я и сделал :) > Double.compare(-Double.MAX_VALUE, Double.MIN_VALUE-Double.MAX_VALUE)
=>
0
Создание\удаление инстанций классов это дорогостоящая операция. Сборщик мусора потратит дополнительно и время и память на такую инстанцию, что однозначно снизит производительность.Вы явно не знаете, как работают современные виртуальные машины, а они гораздо умнее! Конкретно в данном случае (вкупе с инлайном конструктора DoubleHolder и метода compareTo, а также escape-анализом) виртуальная машина в состоянии догадаться, что объект не утекает из метода и вообще не создавать его в куче, а разместить даже не на стеке, а в регистрах (тут потребуется всего один 64-битный регистр). Если даже он попадёт в кучу, это будет локальная кэш-линия данного ядра, которая до момента удаления объекта из кучи скорее всего не попадёт даже в основную память. Неубегающие объекты из первого поколения удаляются очень быстро. Наоборот, при загрузке с помощью getstatic мы вряд ли сразу удачно попадём в кэш (между загрузкой класса и выполнением метода могло пройти много времени и вообще это могло выполняться на разных процессорах). Тут мы схватим cache miss и будем дожидаться подгрузки кэш-линии добрую сотню тактов. В общем, я совсем не уверен, что getstatic здесь стопроцентно отработает быстрее. Преждевременная оптимизация — корень зла.
Пишите компараторы правильно