1. 程式人生 > >Android 二維陣列相關操作

Android 二維陣列相關操作

最新專案中有個地方需要使用到二維陣列來進行資料操作,然後android本身並沒有提供相關介面方法來做二維陣列操作,只能自己來整,記錄一下,以防以後用到。
1、刪除二維陣列的某行:
/**
* 刪除目標行的位置
* @param raw
*/
private void deleteRawArray(int raw) {
List[][] arrayTmep = new ArrayList[arrays.length][arrays[0].length];
for (int i = 0; i < arrayTmep.length; i++) {
for (int j = 0; j < arrays[0].length; j++) {
arrayTmep[i][j] = new ArrayList<>();
arrayTmep[i][j].addAll(arrays[i][j]);
}
}
arrays = new ArrayList[arrayTmep.length - 1][arrayTmep[0].length];
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
if (i < raw) {
arrays[i][j] = arrayTmep[i][j];
} else {
arrays[i][j] = arrayTmep[i + 1][j];
}
}
}
}
2、移動某行到某一位置
/**
* 交換二維陣列的行位置
* startRaw 開始行的位置
* toRaw 目標行的位置
*/
private void exChangeDoubleArray(int startRaw, int toRaw) {
List[][] arrayTmep = new List[arrays.length][arrays[0].length];
for (int i = 0; i < arrayTmep.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
arrayTmep[i][j] = new ArrayList<>();
if (arrays[i][j] != null) {
arrayTmep[i][j].addAll(arrays[i][j]);
}
}
}
//分3種情況 1、向後移 2、向前移 3、位置不變
if (startRaw < toRaw) {
//向後移
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
if (i < toRaw && i >= startRaw) {
arrays[i][j].clear();
arrays[i][j].addAll(arrayTmep[i + 1][j]);
} else if (i == toRaw) {
arrays[toRaw][j].clear();
arrays[toRaw][j].addAll(arrayTmep[startRaw][j]);
}
}
}
} else if (startRaw > toRaw) {
//向前移
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
if (i == toRaw) {
arrays[i][j].clear();
arrays[i][j].addAll(arrayTmep[startRaw][j]);
} else if (i <= startRaw && i > toRaw) {
arrays[i][j].clear();
arrays[i][j].addAll(arrayTmep[i - 1][j]);} }}} }
3、在二維陣列的最後一行新增一行陣列
/**
* 新增二維陣列的一行
*/
private void addDoubleArray() {
//將新增模板之前的二維陣列放在一個新的二維陣列中以儲存當前的二維陣列資料
List[][] arrayTmep = new ArrayList[arrays.length][arrays[0].length];
for (int i = 0; i < arrayTmep.length; i++) {
for (int j = 0; j < arrays[0].length; j++) {
arrayTmep[i][j] = new ArrayList<>();
arrayTmep[i][j].addAll(arrays[i][j]);
}
}
//首先比較最大頁數的最大值,然後設定二維陣列列數的最大值
List list = allBean.getWorklist();
int size = list.get(allBean.getWorklist().size() - 1).getPages().size();
int maxLen = 0;
if (size > arrayTmep[0].length) {
//如果當前新增的模板的頁面大於之前的頁面,那麼二維陣列的列數就是當前模板的頁數
maxLen = size;
} else {
maxLen = arrayTmep[0].length;
}
arrays = new ArrayList[arrayTmep.length + 1][maxLen];
//首先我要將這個arrayTemp的資料複製到當前這個新的arrays中去
for (int i = 0; i < arrayTmep.length; i++) {
for (int j = 0; j < arrayTmep[i].length; j++) {
arrays[i][j] = new ArrayList<>();
arrays[i][j].addAll(arrayTmep[i][j]);
}
}
for (int i = arrayTmep.length; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
arrays[i][j] = new ArrayList<>();
if(allBean.getWorklist().get(i).getPages() != null) {
if (allBean.getWorklist().get(i).getPages().size() <= j) {
arrays[i][j].add(new OptionBean(1, null));
} else {
arrays[i][j].add(new OptionBean(1, new Gson().toJson(allBean.getWorklist().get(i).getPages())));}}}} }
4、列印二維陣列(不使用複雜度相對較高的for for迴圈)
for (int i = 0, j = 0; i < arrays.length; ) {
j++;
if (j >= arrays[i].length) {
i++;
j = 0;
}
}

總體來說方法是這樣的,在使用中需要替換成你自己使用的資料結構.