存储多个点(float,float)的最佳方式是什么?
What is the best way to store multiple points (float, float)?
我是 Java 的新手,我需要存储大量点(x、y 浮点坐标)。哪个选项更适合存储在大数组中(使用更少的内存)?
点class:
// It`s in the same file as my main class
class Point {
public float x;
public float y;
public Point(float x, float y){
this.x = x;
this.y = y;
}
}
或数组的数组:
float[] point = { 0.0f, 0.0f };
float[][] positions = { //Multiple Pointes here\ };
一个对象有开销。如果您唯一关心的是内存消耗,那么原始 float
的二维数组将“更便宜”。
就内存而言,最便宜的可能是使用大小为 2N 的一维数组(一旦 Java 获取值对象,这可能会改变),其中 N 是点数,其中 x 是存储在 2n 和 y 在 2n+1 (0 <= n < N).
换句话说:
public class Points {
private final float[] points;
public Points(int size) {
points = new float[2 * size];
}
public float getX(int index) {
return points[2 * index];
}
public void setX(int index, float value) {
points[2 * index] = value;
}
public float getY(int index) {
return points[2 * index + 1];
}
public void setY(int index, float value) {
points[2 * index + 1] = value;
}
}
但是,如果您需要单独处理点,那么使用 Point
class 会更好。与使用二维数组(IIRC,Point
为 16 个字节,每个点 float[2]
为 24 个字节相比,它的开销会稍微少一些,但也提供了更好的抽象。
我是 Java 的新手,我需要存储大量点(x、y 浮点坐标)。哪个选项更适合存储在大数组中(使用更少的内存)?
点class:
// It`s in the same file as my main class
class Point {
public float x;
public float y;
public Point(float x, float y){
this.x = x;
this.y = y;
}
}
或数组的数组:
float[] point = { 0.0f, 0.0f };
float[][] positions = { //Multiple Pointes here\ };
一个对象有开销。如果您唯一关心的是内存消耗,那么原始 float
的二维数组将“更便宜”。
就内存而言,最便宜的可能是使用大小为 2N 的一维数组(一旦 Java 获取值对象,这可能会改变),其中 N 是点数,其中 x 是存储在 2n 和 y 在 2n+1 (0 <= n < N).
换句话说:
public class Points {
private final float[] points;
public Points(int size) {
points = new float[2 * size];
}
public float getX(int index) {
return points[2 * index];
}
public void setX(int index, float value) {
points[2 * index] = value;
}
public float getY(int index) {
return points[2 * index + 1];
}
public void setY(int index, float value) {
points[2 * index + 1] = value;
}
}
但是,如果您需要单独处理点,那么使用 Point
class 会更好。与使用二维数组(IIRC,Point
为 16 个字节,每个点 float[2]
为 24 个字节相比,它的开销会稍微少一些,但也提供了更好的抽象。