我有一张excel表,让我们说:
请注意,每个行和列都有自己的名称K,L ...和A,B ....还要注意每个单元格都有形式(int,int,int,int),据我所知很好地代表了一个arraylist。处理这个问题的最佳方法是什么;定义一个二维阵列的arraylists;或者是arraylists的arraylist;或者使用哈希映射;我发现使用二维阵列的arraylists以便运行循环更简单但是我必须将每个2D数组元素初始化为arraylist(或不是;)。请注意,它是一个很大的excel表(超过2500个单元格)。提前谢谢。
答案 0 :(得分:0)
如果您需要快速随机访问,可以将HashMap与单元格密钥一起使用。
public class CellKey {
final String col;
final String row;
private CellKey () {} // no instatiation outside
public CellKey at(String row, String column) {
this.col = column;
this.row = row;
}
public getColumn() {
return col;
}
public getRow() {
return row;
}
public int hashCode() {
return Objects.hash(col, row);
}
public boolean equals(CellKey other) {
return this.col.equals(other.col) && this.row.equals(other.row);
}
}
现在在表示单元格值的集合中使用它:
Map<CellKey, List<Integer>> cells = new HashMap<>();
// get value
cells.get(CellKey.at(row, column));
// put value
cells.put(CellKey.at(row, column), value);
cells.put(CellKey.at(row, column), Arrays.asList(int1, int2, int3));
// check if value exists
cells.contains(CellKey.at(row, column));
// iterate over all cells containing values
cells.entrySet().stream().forEach(e -> {
String row = e.getKey().getRow();
String column = e.getKey().getColumn();
List<Integer> value = e.getValue();
// make your actions
});
// iterate over given row
String row = "K";
String[] columns = new String[]{"A", "B", "C", "D"};
for (String c : columns) {
List<Integer> values = cells.get(CellKey.at(row, c));
// perform actions
}