๐ LiteIndex - Fast and extensive library for indexing box/area in space by vectors/location/position based on hash indexing.
public class Main {
public static void main(String[] args) {
int SPACE_SIZE = 10_000;
int AREA_SIZE = 80;
// create index
SpaceIndex<Area, Location> index = SpaceIndex.<Area, Location>builder()
.axisX(location -> location.getX())
.axisZ(location -> location.getZ())
.axisY(location -> location.getY())
.space(area -> area.getMin(), area -> area.getMax())
.indexing(IndexingAlgorithm.calculateOptimal(SPACE_SIZE, AREA_SIZE))
.concurrent(false)
.build();
// put areas to index
index.put(new Area(new Location(0, 0, 0), new Location(10, 10, 10)));
index.put(new Area(new Location(3, 3, 3), new Location(7, 7, 7)));
index.put(new Area(new Location(5, 5, 5), new Location(15, 15, 15)));
// fast search
List<Area> areas = index.get(new Location(5, 5, 5));
}
}Variables: It's not limit, it's just for optimization and memory saving.
MAP_SIZE- expected maximum size of spaceAREA_SIZE- expected maximum size of area
SpaceIndex builder
axisX- function for getting X coordinateaxisZ- function for getting Z coordinateaxisY- function for getting Y coordinatespace- function for getting min and max location from areaindexing- set indexing algorithm (configure for better performance)concurrent- set concurrent mode (if you want to use index in multiple threads)
SpaceIndex methods
put- put area to indexget- get areas by locationgetAll- get all areas from indexgetFirst- get first area by locationremove- remove area from indexremoveAll- remove all areas from indexcontains- check if index contains areasize- get size of index
IndexingAlgorithm
calculateOptimal- calculate optimal indexing algorithm for your space and area sizechunk- create indexing algorithm (advanced)
repositories {
maven("https://repo.eternalcode.pl/releases")
}dependencies {
implementation("dev.rollczi:liteindex:1.0.0")
}<repositories>
<repository>
<id>eternalcode-repo</id>
<url>https://repo.eternalcode.pl/releases</url>
</repository>
</repositories><dependencies>
<dependency>
<groupId>dev.rollczi</groupId>
<artifactId>liteindex</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>