我想创建一个 XY 整数数组(或任何类型),但我想使用类似于 ArrayList 类的“add”、“remove”、“contains”、“indexOf”等方法。

现有的类是否具有这些功能?

附:我不想创建 ArrayList 的 ArrayList

有帮助吗?

解决方案

没有,AFAIK没有这样的任何类。但实现一个应该是相当容易:

class BiDimensionalArray<T>{
  Object[][] backupArray;
  int lengthX;
  int lengthY;

  public BiDimensionalArray(int lengthX, int lengthY) {
    backupArray = new Object[lengthX][lengthY];
    this.lengthX = lengthX;
    this.lengthY = lengthY;
  }

  public void set(int x, int y, T value){
    backupArray[x][y] = value;
  }

  public T get(int x, int y){
    return (T) backupArray[x][y];
  }

  public void addX(T[] valuesY) {
    Object[][] newArray = new Object[lengthX+1][lengthY];
    System.arraycopy(backupArray, 0, newArray, 0, lengthX);
    newArray[lengthX]=valuesY;
    backupArray = newArray;
    lengthX = lengthX+1;
  }
}

注:Typeparameter不内部使用,因为作为new T[][]没有这样的事

<强> EDITS 结果 演示结果添加ADDX方法 固定编译错误

其他提示

根据您的描述,我建议您尝试使用JAMA。
您还可以为 XY 矩阵创建自己的实现。然而,为此,您必须决定您到底想从实施中得到什么。
如果您的矩阵不是固定大小,那么您可以使用类似三元组的格式来存储矩阵。(只有当矩阵稀疏时,这种表示才有效)。在内部,您将使用三个 ArrayList;第一个用于存储行号,第二个用于存储列号,第三个用于存储实际值。
因此,您将编写 add(int row, int column, int value) 方法,它负责处理诸如保持 ArrayList 按行号排序、然后按列号排序等操作。以提高随机访问的效率。
通过这种表示,您可以实现所有方法,例如 remove(), contains(), ,可用于 ArrayList。

有在标准Java库没有本地矩阵类型。话虽这么说,这是相当容易地创建一个。的方法是微不足道的实施并可以与一个阵列,List或任何支持它。

public class Matrix<T> {
  private final List<T> values;
  private final int rows;

  public Matrix(int x, int y) {
    this.rows = x;
    values = new ArrayList<T>(x * y);
  ]

  public int get(int x, int y) {
    return values.get(x * rows + y);
  }

  public boolean contains(T t) {
    return values.contains(t);
  }

  // etc
}

签出 JAMA 时,它是来自MathWorks和NIST。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top