Это должно быть ужасное кодирование, верно?
Большинство людей, вероятно, согласятся, что если вы используете Java 5+, и не было особой необходимости выставлять объекты итератора, то вам следует упростить код, используя цикл «для каждого». Однако это не должно иметь никакого значения для производительности и, конечно, не для сложности.
Разоблачение итераторов без необходимости - это, конечно, не страшное программирование. По шкале от 1 до 10 с плохим стилем кодирования это всего лишь 1 или 2. (И любой, кто говорит вам иначе, не видел действительно ужасного кодирования в последнее время ...)
Так как же сделать n ^ 2 над собой?
Ваш исходный вопрос слишком надуман, чтобы дать ответ на этот вопрос.
В зависимости от отношения real вы можете использовать симметрию / антисимметрию или ассоциативность для сокращения объема работы.
Однако без этой информации (или другой информации о домене) вы не сможете улучшить это решение.
Для вашего реального примера (с участием частиц) вы можете избежать проблемы сравнения O(N^2)
, разделив экран на области; например используя квадри. Затем вы перебираете точки в одной и той же и соседних областях.