创建数据表的最佳方法,以及如何初始化它?

时间:2012-04-03 03:51:16

标签: java hashmap

我想创建一个包含String键值和整数数据的表。现在我倾向于创建一个二维HashMap:

HashMap<String, HashMap<String, Integer>>

这是我最快最灵活的选择吗?我正在使用它来创建一个语言模型,因此会有很多变化和频繁的查找。还有,这是正确的语法吗?我该如何初始化它?

new HashMap<String, new HashMap<String, Integer>> 
由于某些原因,我似乎不对,但我不能说出原因。

5 个答案:

答案 0 :(得分:2)

你也可以像这样定义你的地图:

map = new HashMap<Pair<String>,Integer>();

Pair有合理定义的地方(不要忘记equalshashCode!)。

这更简单(插入不必检查是否创建了子映射)并且可能更快(只有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);