存储多个点(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 个字节相比,它的开销会稍微少一些,但也提供了更好的抽象。