3 回答
![?](http://img1.sycdn.imooc.com/5333a0350001692e02200220-100-100.jpg)
TA贡献2012条经验 获得超12个赞
您始终可以将数组包装在一个实现的对象中List<List<Integer>>,然后将其视为矩阵。
private static class Matrix extends AbstractList<List<Integer>> implements List<List<Integer>> {
final int[][] data;
private static class Row extends AbstractList<Integer> implements List<Integer> {
final int[] row;
public Row(int[] row) {
this.row = row;
}
@Override
public Integer get(int index) {
return row[index];
}
@Override
public int size() {
return row.length;
}
}
public Matrix(int[][] data) {
this.data = data;
}
@Override
public List<Integer> get(int index) {
return new Row(data[index]);
}
@Override
public int size() {
return data.length;
}
}
public List<List<Integer>> asMatrix(int[][] data) {
return new Matrix(data);
}
private void test() {
int[][] test = new int[][] {
{1,2,3},
{4,5,6},
{7,8,9}
};
List<List<Integer>> matrix = asMatrix(test);
System.out.println(matrix);
}
这种方法可以扩展为允许仅通过set在内部Row类中实现来写回内部数组。扩展Matrix以允许get(row,col)方法将是微不足道的。
您需要为需要处理的每个原语编写其中之一。
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
TA贡献1812条经验 获得超5个赞
为了速度和紧凑性,我们中的许多人在原始类数组的顶部添加了一个矩阵访问器垫片。例如(伪代码)
int data[WIDTH*HEIGHT]; // populate it
int at(int x, int y) { return data[y*WIDTH+x]; }
添加回答
举报