#java #arrays #contain
#java #массивы #содержать #содержит
Вопрос:
У меня есть массив, состоящий из X чисел 2 точек, и моя цель — выполнить логическую операцию, которая могла бы проверить, имеет ли этот массив указанную 2 точки. Что — то вроде этого:
Point2D.Double arrayPoints[] = new Point2D.Double[numberOfPoints];
Point2D.Double pointPVariable = new Point2D.Double(positionXVariable,positionYVariable);
arrayPoints[variableNumber] = pointPVariable;
if(arrayPoints has the Point2D(2.45,6.52)){
do this
}
Как я могу выполнить эту логическую операцию?? Большое вам спасибо!
Ответ №1:
Arrays.asList(arrayPoints).contains(new Point2D.Double(2.45,6.52))
Это работает до тех пор, пока сравниваемые классы переопределяют метод equals .
Комментарии:
1. Теперь я обнаружил этот метод поиска по массиву, спасибо. До сих пор я был убежден, что лучший метод — это перебирать элементы массива и проверять каждый элемент, но я думаю, что лучше делать это с помощью одной строки кода :-). Есть ли какая-либо разница в производительности при использовании этого метода по сравнению с итерацией и проверкой массива с помощью цикла for?
2. Это делает по существу то же самое. Оба подхода равны O (n). Существуют небольшие накладные расходы, так как список должен быть создан, но это должно быть незначительно, потому что это будет ArrayList только со ссылкой (в отличие от полной копии) на исходный массив.
Ответ №2:
Если ваш массив отсортирован в естественном порядке Point2D.Double
, вы можете использовать этот Arrays.binarySearch
метод.
if (Arrays.binarySearch(arraysPoints, new Point2D.Double(2.45,6.52)) >= 0) {
do this
}