我想创建一个包含String键值和整数数据的表。现在我倾向于创建一个二维HashMap:
HashMap<String, HashMap<String, Integer>>
这是我最快最灵活的选择吗?我正在使用它来创建一个语言模型,因此会有很多变化和频繁的查找。还有,这是正确的语法吗?我该如何初始化它?
new HashMap<String, new HashMap<String, Integer>>
由于某些原因,我似乎不对,但我不能说出原因。
答案 0 :(得分:2)
你也可以像这样定义你的地图:
map = new HashMap<Pair<String>,Integer>();
Pair
有合理定义的地方(不要忘记equals
和hashCode
!)。
这更简单(插入不必检查是否创建了子映射)并且可能更快(只有1次散列查找而不是2次)。
如果你知道某些字符不能出现在你的任何一个字符串中,那么你可以使用String
而不是Pair<String>
,其中键是两个键与该字符的串联作为分隔符。
答案 1 :(得分:1)
仅供记录:Google Guava Table
Google Guava是一个非常方便的库,包含许多有用的集合和实用程序类。
答案 2 :(得分:0)
此语法new HashMap<String, new HashMap<String, Integer>>
不正确。
你可以这样做
map = new HashMap<String, Map<String, Integer>>;
map.put("key", new HashMap<String, Integer>());
即。对于每个键,您需要放置一个新的子地图实例。
答案 3 :(得分:0)
地图绝对有用。
Map<String, Map<String, Integer>> myTable = new HashMap<String, Map<String, Integer>>();
// Put a new "row" in the column "some_col"
myTable.put("some_col", new HashMap<String, Integer>());
// put a value into some_col and some_row
myTable.get("some_col").put("some_row", 9);
// Get a value from some_col and some_row
Integer val = myTable.get("some_col").get("some_row");
答案 4 :(得分:0)
哈希映射快速而灵活,但可能会占用更多内存。初始化时,define语法是正确的:
HashMap<String, HashMap<String, Integer>> map = new HashMap<String, HashMap<String, Integer>>();
HashMap<String, Integer> record = new HashMap<String, Integer>();
record.put("key", 42);
map.put("key", record);