Я также работал с типом Solr BBoxField (и JTS). См. Определение типа поля:
<fieldType name="my_bbox"
class="solr.BBoxField"
spatialContextFactory="JTS"
format="WKT"
geo="true"
distanceUnits="kilometers"
numberType="pdouble"
/>
Мне все еще неясно, почему использование SpatialRecursivePrefixTreeFieldType
с Geo3D
не дает правильных результатов.
Скорость импорта данных значительно выше, чем при использовании SpatialRecursivePrefixTreeFieldType
с JTS
.
Метод java.lang.Array
hashCode
наследуется от объекта
, что означает, что хеш-код зависит от ссылки. Чтобы получить хеш-код на основе содержимого массива, используйте Arrays.hashCode
.
Остерегайтесь, хотя это поверхностная реализация хеш-кода. Также присутствует глубокая реализация Arrays.deepHashCode
.
Массивы используют хэш-код по умолчанию, основанный на расположении памяти (но это не обязательно ячейка памяти, так как это только int
и все адреса памяти не подходят). Вы можете увидеть это, также распечатав результат System.identityHashCode (foo)
.
Массивы только равны
, если они одинаковы, идентичны массиву. Таким образом, хеш-коды массива будут равны, как правило, если они совпадают, идентичный массив.
Реализация по умолчанию для Object.hashCode () действительно должна возвращать значение указателя объекта, хотя это реализация зависимый. Например, 64-битная JVM может взять указатель и XOR, а также старшие и младшие слова вместе. Подклассам рекомендуется переопределять это поведение, если оно имеет смысл.
Однако не имеет смысла проводить сравнения на равенство для изменяемых массивов. Если элемент изменяется, то эти два больше не равны. Чтобы поддерживать инвариант о том, что один и тот же массив всегда будет возвращать один и тот же hashCode, независимо от того, что происходит с его элементами, массивы не переопределяют поведение хэш-кода по умолчанию.
Обратите внимание, что java.util.Arrays предоставляет реализацию deepHashCode () для хэширования на основе содержимого массива, а не идентичности самого массива,