В Java SE 7, я пытаюсь решить проблему, когда у меня есть серия Rectangles. Через какое-то взаимодействие с пользователем я получаю Point. Мне нужно найти (первый) прямоугольник, содержащий точку (если есть).Поиск прямоугольника, который содержит точку
В настоящее время я делаю это с помощью самого наивного решения только для хранения прямоугольников в ArrayList и поиска содержащего Rectangle путем итерации по списку и использования . Проблема в том, что, поскольку это должно быть интерактивным для пользователя, этот метод начинает слишком медленным даже для относительно небольшого количества прямоугольников (скажем, 200).
Мой текущий код выглядит примерно так:
// Given rects is an ArrayList<Rectangle>, and p is a Point:
for(Rectangle r : rects)
{
if(r.contains(p))
{
return r;
}
}
return null;
Есть ли более умный способ решить эту проблему (а именно, в O (журнал N) вместо O (N), и/или с меньшим количеством звонки на , устраняя явно плохие кандидатуры раньше)?
'Проблема в том, что, поскольку это должно быть интерактивным для пользователя, этот метод начинает слишком медленным даже для относительно небольшого количества прямоугольников (скажем, 200).« Должно быть что-то еще не так с кодом , Итерация более 200 прямоугольников не займет времени. – camickr
Вы правы. Простой профиль показывает, что это даже не близко к тому времени, когда я трачу на обработку щелчка мыши (получается, что он занимает около 8 мс на моем довольно среднем ноутбуке). Тем не менее, я все еще интересуюсь этой проблемой в более общем смысле. – CmdrMoozy