Pregunta

Quiero crear una matriz de enteros XY (o cualquier tipo), pero quiero utilizar métodos como "add", "eliminar", "contiene", "indexOf" similar a la clase ArrayList.

¿Hay alguna clase existente con estas capacidades?

PD: No quiero crear un ArrayList de ArrayList

¿Fue útil?

Solución

No, que yo sepa no hay ninguna clase como esta. Pero la implementación de uno debería ser bastante fácil:

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;
  }
}

Nota: El Typeparameter no se usa internamente, porque no hay tal cosa como new T[][]

EDITS
Método ADDX Agregado para la demostración
Fijos de compilación errores

Otros consejos

A partir de su descripción, te sugeriría que intentar usar JAMA.
También puede crear su propia implementación de una matriz XY. Sin embargo, para hacer esto, usted tendrá que decidir qué es exactamente lo que quieres de la implantación.
Si su matriz no es de tamaño fijo, entonces se puede usar algo como el formato 3-tupla para el almacenamiento de matrices. (Esta representación es eficaz sólo si su matriz es escasa). Internamente, que va a utilizar tres ArrayLists; uno para almacenar el número de fila, el segundo para almacenar el número de columna y la tercera para almacenar el valor real.
En consecuencia, usted va a escribir el método add(int row, int column, int value), que se ocupa de cosas como el mantenimiento de los ArrayLists ordenadas por número de fila, y luego por número de columna, etc., para aumentar la eficiencia de accesos aleatorios.
Con esta representación, se puede poner en práctica todos los métodos como remove(), contains(), que están disponibles para ArrayList.

No hay tipos de matriz nativas en las bibliotecas estándar de Java. Dicho esto, es bastante fácil para crear una. Los métodos son triviales de implementar y puede hacer una copia con una matriz, un List o lo que sea.

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 , es de Mathworks y NIST.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top