org.h2.mvstore.rtree

## Class MVRTreeMap<V>

- java.lang.Object
- - java.util.AbstractMap<K,V>
  - - org.h2.mvstore.MVMap<SpatialKey,V>
    - - org.h2.mvstore.rtree.MVRTreeMap<V>

Type Parameters:
  `V` - the value class

All Implemented Interfaces:
  java.util.concurrent.ConcurrentMap<SpatialKey,V>, java.util.Map<SpatialKey,V>

    public class MVRTreeMap<V>
    extends MVMap<SpatialKey,V>

An r-tree implementation. It supports both the linear and the quadratic split algorithm.

### Nested Class Summary

Nested Classes
`static class` `MVRTreeMap.Builder<V>` A builder for this class.
`static class` `MVRTreeMap.RTreeCursor` A cursor to iterate over a subset of the keys.

### Nested classes/interfaces inherited from class org.h2.mvstore.MVMap

`MVMap.MapBuilder<M extends MVMap<K,V>,K,V>`

### Nested classes/interfaces inherited from class java.util.AbstractMap

`java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>`

### Nested classes/interfaces inherited from interface java.util.Map

`java.util.Map.Entry<K,V>`

### Field Summary

### Fields inherited from class org.h2.mvstore.MVMap

`root, store, writeVersion`

### Constructor Summary

Constructors
Constructor and Description
`MVRTreeMap(int dimensions, DataType valueType)`

### Method Summary

Methods
`void` `add(SpatialKey key, V value)` Add a given key-value pair.
`void` `addNodeKeys(java.util.ArrayList<SpatialKey> list, Page p)` Add all node keys (including internal bounds) to the given list.
`static <V> MVRTreeMap<V>` `create(int dimensions, DataType valueType)` Create a new map with the given dimensions and value type.
`MVRTreeMap.RTreeCursor` `findContainedKeys(SpatialKey x)` Iterate over all keys that are fully contained within the given rectangle.
`MVRTreeMap.RTreeCursor` `findIntersectingKeys(SpatialKey x)` Iterate over all keys that have an intersection with the given rectangle.
`V` `get(java.lang.Object key)` Get a value.
`protected java.lang.Object` `get(Page p, java.lang.Object key)` Get the object for the given key.
`protected int` `getChildPageCount(Page p)` Get the child page count for this page.
`java.lang.String` `getType()` Get the map type.
`boolean` `isQuadraticSplit()`
`V` `put(SpatialKey key, V value)` Add or replace a key-value pair.
`protected java.lang.Object` `remove(Page p, long writeVersion, java.lang.Object key)` Remove a key-value pair.
`void` `setQuadraticSplit(boolean quadraticSplit)`

### Methods inherited from class org.h2.mvstore.MVMap

`areValuesEqual, beforeWrite, binarySearch, binarySearchPage, ceilingKey, clear, containsKey, cursor, entrySet, equals, firstKey, floorKey, getCreateVersion, getFirstLast, getId, getKey, getKeyIndex, getKeyType, getMinMax, getName, getRoot, getStore, getValueType, getVersion, hashCode, higherKey, init, isClosed, isEmpty, isReadOnly, isVolatile, keyIterator, keyList, keySet, lastKey, lowerKey, newRoot, openVersion, put, putIfAbsent, remove, remove, removePage, replace, replace, setVolatile, size, sizeAsLong, splitRootIfNeeded, toString`

### Methods inherited from class java.util.AbstractMap

`clone, containsValue, putAll, values`

### Methods inherited from class java.lang.Object

`finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.util.Map

`containsValue, putAll, values`

### Constructor Detail

#### MVRTreeMap

    public MVRTreeMap(int dimensions,
              DataType valueType)

### Method Detail

#### create

    public static <V> MVRTreeMap<V> create(int dimensions,
                           DataType valueType)

Create a new map with the given dimensions and value type.

Type Parameters:
  `V` - the value type
Parameters:
  `dimensions` - the number of dimensions
  `valueType` - the value type
Returns:
  the map

#### get

    public V get(java.lang.Object key)

Description copied from class: `MVMap`
Get a value.

Specified by:
  `get` in interface `java.util.Map<SpatialKey,V>`
Overrides:
  `get` in class `MVMap<SpatialKey,V>`
Parameters:
  `key` - the key
Returns:
  the value, or null if not found

#### findIntersectingKeys

    public MVRTreeMap.RTreeCursor findIntersectingKeys(SpatialKey x)

Iterate over all keys that have an intersection with the given rectangle.

Parameters:
  `x` - the rectangle
Returns:
  the iterator

#### findContainedKeys

    public MVRTreeMap.RTreeCursor findContainedKeys(SpatialKey x)

Iterate over all keys that are fully contained within the given rectangle.

Parameters:
  `x` - the rectangle
Returns:
  the iterator

#### get

    protected java.lang.Object get(Page p,
                       java.lang.Object key)

Get the object for the given key. An exact match is required.

Parameters:
  `p` - the page
  `key` - the key
Returns:
  the value, or null if not found

#### remove

    protected java.lang.Object remove(Page p,
                          long writeVersion,
                          java.lang.Object key)

Description copied from class: `MVMap`
Remove a key-value pair.

Overrides:
  `remove` in class `MVMap<SpatialKey,V>`
Parameters:
  `p` - the page (may not be null)
  `writeVersion` - the write version
  `key` - the key
Returns:
  the old value, or null if the key did not exist

#### put

    public V put(SpatialKey key,
        V value)

Description copied from class: `MVMap`
Add or replace a key-value pair.

Specified by:
  `put` in interface `java.util.Map<SpatialKey,V>`
Overrides:
  `put` in class `MVMap<SpatialKey,V>`
Parameters:
  `key` - the key (may not be null)
  `value` - the value (may not be null)
Returns:
  the old value if the key existed, or null otherwise

#### add

    public void add(SpatialKey key,
           V value)

Add a given key-value pair. The key should not exist (if it exists, the result is undefined).

Parameters:
  `key` - the key
  `value` - the value

#### addNodeKeys

    public void addNodeKeys(java.util.ArrayList<SpatialKey> list,
                   Page p)

Add all node keys (including internal bounds) to the given list. This is mainly used to visualize the internal splits.

Parameters:
  `list` - the list
  `p` - the root page

#### isQuadraticSplit

    public boolean isQuadraticSplit()

#### setQuadraticSplit

    public void setQuadraticSplit(boolean quadraticSplit)

#### getChildPageCount

    protected int getChildPageCount(Page p)

Description copied from class: `MVMap`
Get the child page count for this page. This is to allow another map implementation to override the default, in case the last child is not to be used.

Overrides:
  `getChildPageCount` in class `MVMap<SpatialKey,V>`
Parameters:
  `p` - the page
Returns:
  the number of direct children

#### getType

    public java.lang.String getType()

Description copied from class: `MVMap`
Get the map type. When opening an existing map, the map type must match.

Overrides:
  `getType` in class `MVMap<SpatialKey,V>`
Returns:
  the map type