问题:关于Java使用Map集合,如何在key值相同但是value值不同的条件下,
往list中存入这些数据呢?这是自己在JDBC连接数据库时,遇到的一个问题.
比如下面的代码:
.........//这些代码省略掉了,也可以自己写个小测试类
List list = new ArrayList();
Map map = new HashMap();
.......//
while (rs.next()) {
username = rs.getString("username");
createTime = rs.getTimestamp("createTime");
title = rs.getString("title");
content = rs.getString("content");
System.out.println(username + " " + createTime + " " + " "
+ title + " " + content);
map.put("username", rs.getString("username"));
map.put("createTime", rs.getTimestamp("createTime"));
map.put("title", rs.getString("title"));
map.put("content", rs.getString("content"));
list.add(map);
}于是我一直这么做,后来发现,查出来的值,都是最后存入的,上网查了一下,
说是map集合的特性,key值相同,后面的数据会覆盖前面的数据。
那怎么办呢?
Java有没有什么方法或者特性呢?
当然了,给出代码:
List list = new ArrayList();
Map map = null; //注意这里
try {
con = JDBCUtil.getConnection();
String sql = "SELECT u.username,m.title,m.content,m.createTime" +
" FROM user AS u" +
" INNER JOIN message AS m" +
" ON u.id=m.userId" +
" ORDER BY createTime DESC";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
map = new HashMap(); //注意这里
username = rs.getString("username");
createTime = rs.getTimestamp("createTime");
title = rs.getString("title");
content = rs.getString("content");
System.out.println(username + " " + createTime + " " + " "
+ title + " " + content);
map.put("username", rs.getString("username"));
map.put("createTime", rs.getTimestamp("createTime"));
map.put("title", rs.getString("title"));
map.put("content", rs.getString("content"));
list.add(map);
}请留意:“//注意这里”
也就是我每次存的时候,再对map给new HashMap(),一下。至于原理么
哈哈哈,那要自己动一下大脑了。