Pergunta

Quero criar uma matriz XY de números inteiros (ou qualquer tipo de tipo), mas quero usar métodos como "Adicionar", "Remover", "contém", "indexof" semelhante à classe ArrayList.

Existe alguma classe existente com esses recursos?

PS: Eu não quero criar um ArrayList of ArrayList

Foi útil?

Solução

Não, Afaik não há nenhuma aula como essa. Mas implementar um deve 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: o typeParameter não é usado internamente, porque não existe new T[][]

EDITAR% S
Método Addx adicionado para demonstração
Erros de compilação fixa

Outras dicas

Pela sua descrição, sugiro que você tente usar o JAMA.
Você também pode criar sua própria implementação para uma matriz XY. No entanto, para fazer isso, você terá que decidir o que exatamente deseja da implementação.
Se sua matriz não for de tamanho fixo, você poderá usar algo como o formato de 3 tuple para armazenar matrizes. (Essa representação é eficiente apenas se sua matriz for escassa). Internamente, você usará três Arraylists; Um para armazenar o número da linha, segundo para armazenar o número da coluna e o terceiro para armazenar o valor real.
Consequentemente, você escreverá o add(int row, int column, int value) Método, que cuida de coisas como manter as listas de array classificadas pelo número da linha, depois pelo número da coluna, etc. para aumentar a eficiência dos acessos aleatórios.
Com esta representação, você pode implementar todos os métodos como remove(), contains(), que estão disponíveis para a ArrayList.

Não há tipos de matriz nativos nas bibliotecas Java padrão. Dito isto, é bastante fácil criar um. Os métodos são triviais de implementar e você pode apoiá -lo com uma matriz, um List como queiras.

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
}

Verificação de saída Jama, é do Mathworks e Nist.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top