Frage

Ich möchte ein XY-Array von ganzen Zahlen erstellen (oder was auch immer Art), aber ich möchte Methoden verwenden wie „add“, „Entfernen“, „enthält“, „indexOf“ ähnlich wie Arraylist-Klasse.

Gibt es eine bestehende Klasse mit diesen Fähigkeiten?

PS: Ich will nicht, eine Arraylist von Arraylist

erstellen
War es hilfreich?

Lösung

Nein, AFAIK gibt es keine Klasse wie folgt. Aber Implementierung sollte ziemlich einfach sein:

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

Hinweis: Die Typeparameter sind intern nicht verwendet, weil es nicht so etwas wie new T[][] ist

EDITS
Added ADDx Verfahren zur Demonstration
Fest Kompilierung Fehler

Andere Tipps

Aus Ihrer Beschreibung, würde ich Ihnen vorschlagen, JAMA zu versuchen, mit.
Sie können auch Ihre eigene Implementierung für eine XY-Matrix erstellen. Allerdings, dies zu tun, müssen Sie entscheiden, was genau Sie mit der Umsetzung wollen.
Wenn Ihre Matrix nicht mit fester Größe ist, dann kann man so etwas wie der 3-Tupelformat zum Speichern von Matrizen verwenden. (Diese Darstellung ist effizient nur, wenn Ihre Matrix spärlich). Intern werden Sie drei Arraylisten verwenden; eine auf die Zeilennummer für die Speicherung, die zweite für die Spaltennummer und die dritte zum Speichern der Ist-Wert zu speichern.
Dementsprechend werden Sie die add(int row, int column, int value) Methode schreiben, die wie halten die Arraylisten sorgt vor durch Zeilennummer sortiert, dann durch Spaltennummer, etc., um die Effizienz der Zufallszugriffe zu erhöhen.
Mit dieser Darstellung können Sie alle Methoden wie remove(), contains() implementieren, die für Arraylist zur Verfügung stehen.

Es gibt keine nativen Matrix-Typen in den Standard-Java-Bibliotheken. That being said, es ist ziemlich einfach zu erstellen. Die Methoden sind trivial zu implementieren und Sie können es mit einem Array zurück, ein List oder was auch immer.

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
}

Besuche JAMA , es ist von dem Mathworks und NIST.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top