Java: двумерный массив с методами / возможностями, похожими на ArrayList - PullRequest
5 голосов
/ 30 марта 2010

Я хочу создать массив целых чисел XY (или любого другого типа), но я хочу использовать такие методы, как «добавить», «удалить», «содержит», «indexOf», аналогичные классу ArrayList.

Существует ли какой-либо класс с этими возможностями?

PS: я не хочу создавать ArrayList из ArrayList

Ответы [ 4 ]

3 голосов
/ 30 марта 2010

Нет, 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;
  }
}

Примечание. Параметр Type Type не используется для внутренних целей, поскольку отсутствует такая вещь, как new T[][]

редактирует
Добавлен метод addX для демонстрации
Исправлены ошибки компиляции

2 голосов
/ 30 марта 2010

Из вашего описания я бы предложил вам попробовать использовать JAMA.
Вы также можете создать свою собственную реализацию для матрицы XY. Однако для этого вам нужно будет решить, чего именно вы хотите от реализации.
Если ваша Матрица не имеет фиксированного размера, то вы можете использовать что-то вроде формата с тремя кортежами для хранения матриц. (Это представление эффективно, только если ваша матрица разрежена). Внутри вы будете использовать три ArrayLists; один для хранения номера строки, второй для хранения номера столбца и третий для хранения фактического значения.
Соответственно, вы напишите метод add(int row, int column, int value), который заботится о таких вещах, как сохранение списков ArrayLists по номеру строки, затем по номеру столбца и т. Д., Чтобы повысить эффективность случайного доступа.
С помощью этого представления вы можете реализовать все методы, такие как remove(), contains(), доступные для ArrayList.

1 голос
/ 30 марта 2010

проверить JAMA , это из Mathworks и NIST.

1 голос
/ 30 марта 2010

В стандартных библиотеках 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
}
...