Вам действительно нужно обслуживать любую возможную реализацию Point2D? Если вам не нужно, это сохранит виртуальный вызов:
private static boolean isCollisionFloat (Point2D.Float p1, float r1, Point2D.Float p2, float r2)
{
final float r = r1+r2;
final float dx = p1.x - p2.x;
final float dy = p1.y - p2.y;
return (r*r) > (dx*dx) + (dy*dy);
}
testing 1000x1000 points:
Doing nothing took 6 ms
Doing isCollision passing Point2D.Float took 128 ms
Doing isCollision passing Point2D.Double took 127 ms
Doing isCollisionFloat took 71 ms
Doing isCollisionDouble took 72 ms
Если можете, выберите одно или другое, вместо того, чтобы угождать обоим.
Проблема с перфектными вопросами заключается в том, что вам действительно нужно измерить эффекты, и к тому времени кто-то опубликовал тот же ответ, что и неподдерживаемое мнение.