Java: Двумерная антенная решетка с методами/возможностями, подобными ArrayList

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

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

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

5
задан Draemon 30 March 2010 в 12:25
поделиться

4 ответа

Нет, 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 не используется внутри компании, потому что не существует такой вещи, как new T [] []

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

3
ответ дан 14 December 2019 в 08:46
поделиться

В стандартных библиотеках 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
}
1
ответ дан 14 December 2019 в 08:46
поделиться

посмотрите JAMA, это из Mathworks и NIST.

1
ответ дан 14 December 2019 в 08:46
поделиться

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

2
ответ дан 14 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: