我在下面定义了三个数据库表,括号中提到了列名称:
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
已被新值保存用户表的Last_Updated覆盖。
但我想要这两个值。
有没有办法在不使用多个HashMap
结构的情况下实现这一点?
最佳答案
如果您想添加具有相同 key 的项目,那么这将是一个可能的解决方案
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);
}
当你想访问一个元素时,通过maps get()
函数你将得到一个字符串列表,其中是键的值。
但是,最好使用 Multimap 实现:
Guava :
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")
Apache 共享
MultiMap
- javadoc中的示例和具体实现
关于java - 将数据库表中的多个键值对添加到 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864224/