波西米亚人的答案是正确的。如果您使用的是Guava,则可能的替代方法是使用ArrayTable<Integer, Integer, List<Integer>>
. 从文档中:
Table
由二维数组支持的固定大小实现。
创建表时必须提供允许的行键和列键。该表始终包含每个行键/列对的映射。除非提供了另一个值,否则对应于给定行和列的值为 null。
表的大小是恒定的:提供的行键的数量和提供的列键的数量的乘积。表或其视图不支持 remove 和 clear 方法。可以改为使用和
erase(java.lang.Object, java.lang.Object)
方法。eraseAll()
这是它的用法示例:
private static final int NUM_ROWS = 20; //for example
private static final int NUM_COLS = 20; //
private static final ArrayTable<Integer, Integer, List<Integer>> TABLE =
ArrayTable.create(
Ranges.closed(1, NUM_ROWS).asSet(DiscreteDomains.integers()),
Ranges.closed(1, NUM_COLS).asSet(DiscreteDomains.integers())
);
public static List<Integer> getGridQuareList(int row, int col) {
@Nullable List<Integer> list = TABLE.at(row, col);
if (list == null) {
list = Lists.newArrayList(); //or newLinkedList() if you insist
TABLE.set(row, col, list);
}
return list;
}