问题:关于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(),一下。至于原理么
哈哈哈,那要自己动一下大脑了。