Question

Je veux créer un tableau XY d'entiers (ou quel que soit le type), mais je veux utiliser des méthodes telles que « ajouter », « supprimer », « contient », « indexOf » semblable à ArrayList classe.

Y at-il une classe existante avec ces capacités?

PS: Je ne veux pas créer un ArrayList ArrayList

Était-ce utile?

La solution

Non, autant que je sache il n'y a pas une classe comme ça. Mais la mise en œuvre devrait être assez facile:

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

Remarque: Le Typeparameter n'est pas utilisé en interne, parce qu'il n'y a pas une telle chose comme new T[][]

EDITS Ajouté ADDX Méthode de démonstration
Correction d'erreurs de compilation

Autres conseils

D'après votre description, je vous suggère d'essayer d'utiliser JAMA.
Vous pouvez également créer votre propre implémentation pour XY Matrix. Cependant, pour ce faire, vous devrez décider exactement ce que vous voulez de la mise en œuvre.
Si votre matrice n'est pas de taille fixe, vous pouvez utiliser quelque chose comme le format 3-tuple pour le stockage des matrices. (Cette représentation est efficace que si votre matrice est rare). En interne, vous utiliserez trois ArrayLists; une pour stocker le numéro de ligne, le deuxième pour mémoriser le numéro de colonne et le troisième pour stocker la valeur réelle.
Par conséquent, vous écrirez la méthode add(int row, int column, int value), qui prend soin des choses comme garder les ArrayLists trié par numéro de ligne, puis par numéro de colonne, etc. pour accroître l'efficacité des accès aléatoires.
Avec cette représentation, vous pouvez mettre en œuvre toutes les méthodes comme remove(), contains(), qui sont disponibles pour ArrayList.

Il n'y a pas de types de matrice natifs dans les bibliothèques Java standard. Cela étant dit, il est assez facile de créer un. Les méthodes sont très simples à mettre en œuvre et vous pouvez sauvegarder avec un tableau, un List ou autre.

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
}

consultez JAMA , il est des Mathworks et NIST.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top