Я хочу создать массив XY целых чисел (или безотносительно типа), но я хочу использовать методы, любят, "добавляют", "удаляют", "содержит", "indexOf" подобный классу ArrayList.
Есть ли какой-либо существующий класс с этими возможностями?
PS: Я не хочу создавать ArrayList ArrayList
Нет, 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 для демонстрации
Исправленные ошибки компиляции
В стандартных библиотеках 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
}
Судя по вашему описанию, я бы посоветовал вам попробовать использовать JAMA.
Вы также можете создать свою собственную реализацию для XY-матрицы. Однако для этого вам нужно будет решить, что именно вы хотите от реализации.
Если ваша матрица не имеет фиксированного размера, вы можете использовать что-то вроде формата из трех кортежей для хранения матриц. (Это представление эффективно, только если ваша матрица разреженная). Внутри вы будете использовать три списка ArrayList; один для хранения номера строки, второй для хранения номера столбца и третий для хранения фактического значения.
Соответственно, вы напишете метод add (int row, int column, int value)
, который позаботится о таких вещах, как сортировка списков ArrayLists по номеру строки, а затем по столбцу число и т. д. для повышения эффективности случайного доступа.
В этом представлении вы можете реализовать все методы, такие как remove ()
, contains ()
, которые доступны для ArrayList.