Sto cercando di implementare un metodo di ricerca attraverso una grande quantità di punti 2D per quelli che corrispondono a un certo intervallo. Sto pensando di creare HashMaps per <X, Point>
e <Y, Point>
, ma mi chiedo se HashMap sia buono per fare ciò, perché prenderò punti in un intervallo, basato su valori da x_min a x_max e y_min a y_max.
Quindi prendo in pratica tutti i punti da <X,Point>
alla ricerca da x_min a x_max e li confronta con i punti presi da <Y,Point>
da y_min a y_max ...
HashMap<Integer,Point> x_coordinates = new HashMap<Integer,Point>();
for(int i=x_min;i<=x_max;i++){
if(x_coordinates.containsKey(i))
x_coordinates.get(i);
}
HashMap<Integer,Point> y_coordinates = new HashMap<Integer,Point>();
for(int i=y_min;i<=y_max;i++){
if(y_coordinates.containsKey(i))
y_coordinates.get(i);
}
C'è un modo più rapido per ottenere un intervallo di valori da una HashMap o qualche altro tipo di struttura dati?
Ad esempio, se range = 200, seleziona tutti i punti che corrispondono all'intervallo da x-200 a x + 200 e da y-200 a y + 200
Sto cercando di evitare l'iterazione attraverso tutti i punti, ma voglio anche evitare di creare un'enorme matrice 2D, perché i punti in questione sono sparsi su una vasta area.
Dopo alcuni test e in base alla risposta di MichaelT, ho scritto questo codice:
TreeMap<Integer, TreeMap<Integer, Integer>> values;
for (int x : values.subMap(x_min, x_max).keySet()) {
for (int y : values.get(x).subMap(y_min, y_max).values()) {
// y here, represents the values of points in range...
}
}