Package civitas.celestis.util.grid
Class HashGrid<E>
java.lang.Object
civitas.celestis.util.grid.HashGrid<E>
- Type Parameters:
E- The type of element this grid should hold
- All Implemented Interfaces:
BaseGrid<E>,DynamicGrid<E>,Grid<E>,Serializable,Iterable<E>
A grid whose data is stored as a
HashMap.- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionE[]array()Returns an array containing every element within this grid.protected int[]Calculates the minimum required dimensions to hold all elements of this grid.voidclean()Cleans this grid, removing all instance ofnull.voidCleans this grid, then trims it to its minimum possible size.voidclear()Clears all entries within this grid, removing them from memory.collect()Returns a collection containing every element within this grid.intcolumns()Returns the number of columns (the width) of this grid.booleanChecks if this grid contains the provided objectobj.booleancontainsAll(Iterable<?> i) Checks if this grid contains multiple objects.booleanChecks for equality between this grid and the provided objectobj.voidFills this grid, populating every index with the provided valuev.voidFills this grid, but only does so if the original element currently occupying the corresponding slot isnull.voidFills this grid, but only does so within the specified range.voidforEach(TriConsumer<Integer, Integer, ? super E> a) Executes the provided action for each element of this grid.voidExecutes the provided action for each element of this grid.get(int r, int c) Returns the element at the specified index.getOrDefault(int r, int c, E fallback) Returns the element at the specified index, but returns the fallback value if the existing element isnull.inthashCode()Returns the hash code of this instance.iterator()Returns an iterator of every element of this grid.<F> Grid<F>Applies the provided mapper functionfto every element of this grid, then returns a new grid whose values are populated from that of the provided function's return values.mapToDouble(ToDoubleFunction<? super E> f) Applies the provided mapper functionfto every element of this grid, then returns a new double grid whose values are populated from that of the provided function's return values.mapToFloat(ToFloatFunction<? super E> f) Applies the provided mapper functionfto every element of this grid, then returns a new float grid whose values are populated from that of the provided function's return values.mapToInt(ToIntFunction<? super E> f) Applies the provided mapper functionfto every element of this grid, then returns a new integer grid whose values are populated from that of the provided function's return values.mapToLong(ToLongFunction<? super E> f) Applies the provided mapper functionfto every element of this grid, then returns a new long grid whose values are populated from that of the provided function's return values.<F,G> Grid<G> merge(Grid<F> g, BiFunction<? super E, ? super F, G> f) Between this grid and the provided gridg, this applies the merger functionffor each corresponding pair of elements, then returns a new grid whose elements are populated from that of the return values of the merger functionf.static <E> HashGrid<E>of(E[][] values) Creates a new hash grid from a 2D array of values.protected voidremapValues(int newColumns) Given a new column count, this remaps the value map of this grid.booleanremove(int r, int c) Removes the element from the specified position.protected voidRemoves all entries which are outside the current bounds.voidreplaceAll(E oldValue, E newValue) Replaces all instances of the old value with the new value within this grid.resize(int rows, int columns) Returns a resized grid, whose elements are populated from that of this grid's elements.introws()Returns the number of rows (the height) of this grid.set()Returns a set containing every element of this grid.voidSets the value of the specified index.voidSets a sub-grid of this grid, copying values from the provided sub-gridg.voidsetSize(int rows, int columns) Forcefully sets the size of this grid, without regard to the data's integrity.intsize()Returns the size (the geometric area) of this grid.stream()Returns a stream whose source is the elements of this grid.subGrid(int r1, int c1, int r2, int c2) Returns a sub-grid of this grid, whose values are populated from that of this grid's elements within the specified range.toString()Serializes this grid into a string.Returns the transpose of this grid.voidtrim()Trims this grid, reducing its size to the minimum possible size required to hold all elements.voidApplies the provided update functionfto every element of this grid, assigning the return value of the function to the corresponding index of this grid.voidApplies the provided update functionfto every element of this grid, assigning the return value of the function to the corresponding index of this grid.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.lang.Iterable
spliterator
-
Field Details
-
values
The internal map of values. -
rows
protected volatile int rowsThe last-known number of rows. -
columns
protected volatile int columnsThe last-known number of columns.
-
-
Constructor Details
-
HashGrid
public HashGrid()Creates a new 0x0 hash grid. -
HashGrid
public HashGrid(int rows, int columns) Creates a new hash grid.- Parameters:
rows- The number of rows to initializecolumns- The number of columns to initialize
-
HashGrid
Creates a new hash grid. Entries with the valuenullwill be ignored.- Parameters:
g- The grid of which to copy component values from
-
-
Method Details
-
of
Creates a new hash grid from a 2D array of values.- Type Parameters:
E- The type of element to contain- Parameters:
values- The values of which to contain in the grid- Returns:
- The constructed grid
-
rows
public int rows()Returns the number of rows (the height) of this grid. -
columns
public int columns()Returns the number of columns (the width) of this grid. -
size
public int size()Returns the size (the geometric area) of this grid. In other words, this return the maximum capacity of this grid. -
contains
Checks if this grid contains the provided objectobj. -
containsAll
Checks if this grid contains multiple objects.- Specified by:
containsAllin interfaceGrid<E>- Parameters:
i- The iterable object of which to check for containment- Returns:
trueif this grid contains every element of the iterable object
-
get
Returns the element at the specified index.- Specified by:
getin interfaceGrid<E>- Parameters:
r- The index of the row to getc- The index of the column to get- Returns:
- The element at the specified index
- Throws:
IndexOutOfBoundsException- When the indices are out of bounds
-
getOrDefault
Returns the element at the specified index, but returns the fallback value if the existing element isnull.- Specified by:
getOrDefaultin interfaceGrid<E>- Parameters:
r- The index of the row to getc- The index of the column to getfallback- The fallback value of which to return if the element isnull- Returns:
- The element at the specified index, or the fallback value if the existing
element is equal to
null - Throws:
IndexOutOfBoundsException- When the indices are out of bounds
-
set
Sets the value of the specified index.- Specified by:
setin interfaceGrid<E>- Parameters:
r- The index of the row to setc- The index of the column to setv- The value of which to assign to the specified index- Throws:
IndexOutOfBoundsException- When the indices are out of bounds
-
clear
public void clear()Clears all entries within this grid, removing them from memory. This differs from filling the grid withnullin that it reduces the footprint of this grid. This is the equivalent of setting this grid's size to{0, 0}, then resizing it back to its original size.- Specified by:
clearin interfaceDynamicGrid<E>
-
remove
public boolean remove(int r, int c) Removes the element from the specified position. This differs from setting the value tonullin that it physically removes the entry corresponding to the specified index, as opposed to simply setting the value tonull.- Specified by:
removein interfaceDynamicGrid<E>- Parameters:
r- The index of the row to removec- The index of the column to remove- Returns:
trueif there was a value (includingnull) at the specified position, and thus the state of this grid has changed as a result of this operation
-
fill
Fills this grid, populating every index with the provided valuev. -
fillEmpty
Fills this grid, but only does so if the original element currently occupying the corresponding slot isnull. -
fillRange
Fills this grid, but only does so within the specified range.- Specified by:
fillRangein interfaceGrid<E>- Parameters:
r1- The starting position's row indexc1- The starting position's column indexr2- The ending position's row indexc2- The ending position's column indexv- The value of which to fill the specified range with- Throws:
IndexOutOfBoundsException- When the range is out of bounds
-
update
Applies the provided update functionfto every element of this grid, assigning the return value of the function to the corresponding index of this grid. -
update
Applies the provided update functionfto every element of this grid, assigning the return value of the function to the corresponding index of this grid. The row and column indices are provided as the first and second parameter of the function respectively, and the original element is provided as the third parameter of ths function. -
replaceAll
Replaces all instances of the old value with the new value within this grid.- Specified by:
replaceAllin interfaceGrid<E>- Parameters:
oldValue- The old value of which to replacenewValue- The new value of which to replace to
-
subGrid
Returns a sub-grid of this grid, whose values are populated from that of this grid's elements within the specified range. This is not a direct reference to this grid, and changes in the sub-grid will not be reflected to the original grid.- Specified by:
subGridin interfaceGrid<E>- Parameters:
r1- The starting position's row indexc1- The starting position's column indexr2- The ending position's row indexc2- The ending position's column index- Returns:
- The sub-grid of this grid corresponding to the specified range
- Throws:
IndexOutOfBoundsException- When the range is out of bounds
-
setRange
public void setRange(int r1, int c1, int r2, int c2, @Nonnull Grid<? extends E> g) throws IndexOutOfBoundsException Sets a sub-grid of this grid, copying values from the provided sub-gridg. This is not a direct reference to this grid, and changes in the sub-grid will not be reflected to the original grid.- Specified by:
setRangein interfaceGrid<E>- Parameters:
r1- The starting position's row indexc1- The starting position's column indexr2- The ending position's row indexc2- The ending position's column indexg- The sub-grid of this grid containing the values to assign- Throws:
IndexOutOfBoundsException- When the range is out of bounds
-
calculateRequiredDimensions
protected int[] calculateRequiredDimensions()Calculates the minimum required dimensions to hold all elements of this grid.- Returns:
- The minimum dimensions in rows-columns order
-
removeUncontainableEntries
protected void removeUncontainableEntries()Removes all entries which are outside the current bounds. -
remapValues
protected void remapValues(int newColumns) Given a new column count, this remaps the value map of this grid.- Parameters:
newColumns- The new column count
-
clean
public void clean()Cleans this grid, removing all instance ofnull. This does not trim the grid to its minimum possible size.- Specified by:
cleanin interfaceDynamicGrid<E>- See Also:
-
trim
public void trim()Trims this grid, reducing its size to the minimum possible size required to hold all elements. This does not cleannullvalues.- Specified by:
trimin interfaceDynamicGrid<E>- See Also:
-
cleanAndTrim
public void cleanAndTrim()Cleans this grid, then trims it to its minimum possible size. In other words, this performsDynamicGrid.clean(), thentrimsthe grid.- Specified by:
cleanAndTrimin interfaceDynamicGrid<E>- See Also:
-
setSize
public void setSize(int rows, int columns) Forcefully sets the size of this grid, without regard to the data's integrity. If this operation results in the reduction of this grid's size, all elements which are now outside the bounds of this grid will be removed.- Specified by:
setSizein interfaceDynamicGrid<E>- Parameters:
rows- The number rows to resize tocolumns- The number of columns to resize to
-
resize
Returns a resized grid, whose elements are populated from that of this grid's elements. If the requested size is larger than that of this grid's size, the oversized portion will not be populated, leaving it uninitialized asnull. -
transpose
Returns the transpose of this grid. The transpose is a grid whose rows and columns are inverted from that os this grid's rows and columns. The elements are mapped according to the functionf({r, c}) -> {c, r}, whererrepresents the row index, andcrepresents the column index. In simple terms, the rows and columns are inverted. -
map
Applies the provided mapper functionfto every element of this grid, then returns a new grid whose values are populated from that of the provided function's return values. -
mapToDouble
Applies the provided mapper functionfto every element of this grid, then returns a new double grid whose values are populated from that of the provided function's return values.- Specified by:
mapToDoublein interfaceGrid<E>- Parameters:
f- The function of which to apply to each element of this grid- Returns:
- The resulting double grid
-
mapToFloat
Applies the provided mapper functionfto every element of this grid, then returns a new float grid whose values are populated from that of the provided function's return values.- Specified by:
mapToFloatin interfaceGrid<E>- Parameters:
f- The function of which to apply to each element of this grid- Returns:
- The resulting float grid
-
mapToLong
Applies the provided mapper functionfto every element of this grid, then returns a new long grid whose values are populated from that of the provided function's return values. -
mapToInt
Applies the provided mapper functionfto every element of this grid, then returns a new integer grid whose values are populated from that of the provided function's return values. -
merge
@Nonnull public <F,G> Grid<G> merge(@Nonnull Grid<F> g, @Nonnull BiFunction<? super E, ? super F, throws IllegalArgumentExceptionG> f) Between this grid and the provided gridg, this applies the merger functionffor each corresponding pair of elements, then returns a new grid whose elements are populated from that of the return values of the merger functionf.- Specified by:
mergein interfaceGrid<E>- Type Parameters:
F- The type of element to merge this grid withG- The type of element to merge the two grids to- Parameters:
g- The grid of which to merge this grid withf- The merger function to handle the merging of the two grids- Returns:
- The resulting grid
- Throws:
IllegalArgumentException- When the provided gridg's dimensions are different from that of this grid's dimensions
-
array
Returns an array containing every element within this grid. The length of the array is not guaranteed to be equal to the size of this grid, and the order is not guaranteed to be consistent. -
stream
Returns a stream whose source is the elements of this grid. -
collect
Returns a collection containing every element within this grid. The size of the collection is not guaranteed to be equal to the size of this grid, and the order is not guaranteed to be consistent, if there even is one. -
set
Returns a set containing every element of this grid. Due to the nature of sets, every duplicate element will be counted as one element. This property can be useful for certain applications. -
iterator
Returns an iterator of every element of this grid. -
forEach
Executes the provided action for each element of this grid. The order of execution is not guaranteed to be consistent. -
forEach
Executes the provided action for each element of this grid. The row and column indices are provided as the first and second parameter of the function respectively, and the current element is provided as the third parameter of the function. The order of execution is not guaranteed to be consistent. -
equals
Checks for equality between this grid and the provided objectobj. -
toString
Serializes this grid into a string. -
hashCode
public int hashCode()Returns the hash code of this instance.
-