我想創建一個整數(或任何類型)的XY數組,但我想使用像「add」,「remove」,「contains」,「indexOf 「類似於ArrayList類。Java:具有與ArrayList相似的方法/功能的二維數組
是否有任何現有的類具有這些功能?
PS:我不希望創建的ArrayList的ArrayList
我想創建一個整數(或任何類型)的XY數組,但我想使用像「add」,「remove」,「contains」,「indexOf 「類似於ArrayList類。Java:具有與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;
}
}
注:Typeparameter沒有在內部使用,因爲作爲new T[][]
沒有這樣的事編輯
新增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
}
你期待'remove'實際上做什麼? (你想檢查你的論點嗎?) – 2010-03-30 03:48:25
@Tom http://java.sun.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object) – cletus 2010-03-30 04:14:04
I意味着'Matrix.remove'。首先,它只消除了第一次同意,這意味着您依賴於實現佈局。其次,它會像其他方式一樣將剩餘的條目轉移到一個非常不方便的矩陣中,並導致'get'拋出奇怪。 – 2010-03-30 10:17:06
檢出JAMA,它來自Mathworks和NIST。
從你的描述中,我建議你嘗試使用JAMA。
您也可以爲XY矩陣創建自己的實現。但是,爲了做到這一點,您必須決定從實現中究竟需要什麼。
如果您的矩陣不是固定大小,那麼您可以使用類似3元組格式的內容來存儲矩陣。 (只有矩陣稀疏時,此表示纔有效)。在內部,您將使用三個ArrayLists;一個用於存儲行號,第二個用於存儲列號,第三個用於存儲實際值。
因此,您將編寫add(int row, int column, int value)
方法,該方法負責保留ArrayLists按行號排序,然後按列號等方式來提高隨機訪問的效率。
使用此表示法,您可以實現所有可用於ArrayList的方法,如remove()
,。
「我不想創建ArrayList的ArrayList」爲什麼?它實際上完全適合你的描述。是否因爲你想使用原始類型? – Searles 2010-03-30 02:36:37
不是。這是因爲我想創建佔據多個單元格的對象,並且每個對象可以是垂直的也可以是水平的。 如果我們認爲ArrayList是垂直的,那麼我會在水平方向上遇到問題,因爲它們會一次使用varios ArrayLists的各種位置。 – 2010-04-13 19:48:02