[英]Java: Bidimensional Array with methods/capabilities similar to ArrayList
我想創建一個整數的XY數組(或任何類型),但我想使用類似於ArrayList類的“add”,“remove”,“contains”,“indexOf”等方法。
有沒有這些功能的現有課程?
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;
}
}
注意:Typeparameter不在內部使用,因為沒有new T[][]
這樣的東西
EDITS
添加了addX方法進行演示
修復了編譯錯誤
根據您的描述,我建議您嘗試使用JAMA。
您還可以為XY矩陣創建自己的實現。 但是,為此,您必須確定實現的確切要求。
如果您的Matrix不是固定大小,那么您可以使用類似3元組格式的內容來存儲矩陣。 (只有當矩陣稀疏時,此表示才有效)。 在內部,您將使用三個ArrayLists; 一個用於存儲行號,第二個用於存儲列號,第三個用於存儲實際值。
因此,您將編寫add(int row, int column, int value)
方法,該方法負責保持ArrayLists按行號排序,然后按列號等排序,以提高隨機訪問的效率。
使用此表示,您可以實現可用於ArrayList的所有方法,如remove()
, contains()
。
標准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 ,它來自Mathworks和NIST。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.