0

我在下面定义了三个数据库表,括号中提到的列名:

Product (ProductID, Price, Last_Updated)

User (UserID, Name, Address, LocationID, Last_Updated)

Location (LocationID, Loc_Name, Last_Updated)

我想使用 Java(JDK 1.5)将所有表的所有列名添加到一个集合中,例如HashMap.

我的问题是当输入重复键时,先前的值被覆盖。

我像这样添加它们:

Map<String, String> map = new HashMap<String, String>();

map.add("ProductID", "Save the Product ID");
// ...
map.add("Last_Updated", "Save Last_Updated of Product table");
// ...
map.add("LocationID", "Save the LocationID");
// ...
map.add("Last_Updated", "Save Last_Updated of User table.");

现在键Last_Updated被新值覆盖Save Last_Updated of User table.

但我想要这两个值。

有没有办法在不使用多个HashMap结构的情况下实现这一点?

4

5 回答 5

2

如果您想添加具有相同密钥的项目,那么这将是一个可能的解决方案

Map<String, List<String>> map = new HashMap<String, List<String>>();

添加元素时:

public void add(String key, String value) {
    if(!map.containsKey(key)) {
        map.put(key, new ArrayList<String>());
    }
    map.get(key).add(value);
}

当你想访问一个元素时,通过 mapsget()函数你会得到一个字符串列表,这是一个键的值。

但是,最好使用 Multimap 实现:

番石榴:

Multimap- 您可以在 javadoc 中查看具体实现。

Multimap<String, String> map = ArrayListMultimap.create();
map.put("a", "Apple");
map.put("a", "Almonds");
Collection<String> valuesForA = map.get("a"); // List of ("Apple", "Almonds")

阿帕奇公地

MultiMap- javadoc中的示例和具体实现

于 2012-08-08T12:18:04.003 回答
1

如果您仅限于 JDK 5,但允许使用库,请查看公开可用的 MultiMaps:Guava有一个Commons Collections也是如此

于 2012-08-08T12:21:02.040 回答
1

添加表名作为列名的前缀。然后您可以将“Product.Last_Updated”、“User.Last_Updated”和“Location.Last_Updated”分开。
显然,您必须使用未在表或列名称中使用的分隔符;一个 '。' 应该做。

于 2012-08-08T12:12:53.030 回答
0

为什么不像H2或 HSQL 等内存数据库中的非规范化表?

于 2012-08-08T12:15:55.740 回答
0

使用分隔符。像管道符号 (|) 或点 (.)

于 2012-08-08T12:45:33.110 回答