[英]Put Integer in a nested Hashmap in Java
我在此結構中有一個嵌套的Hashmap: HashMap<Integer,HashMap<Integer, Integer>>
。 我試圖按此順序放置數據:
{
item_id1 -> { {user_id1 -> rating} , {user_id2 -> rating} ...}
item_id2 -> ...
...
}
問題是錯誤的user_id
插入了錯誤的item_id
,因此給出了錯誤的評分。 我認為內部HashMap的對象引用存在問題,但是我不確定。
public HashMap<Integer, HashMap<Integer, Integer>> getUserRating() throws SQLException {
HashMap<Integer,HashMap<Integer, Integer>> ratings =
new HashMap<Integer,HashMap<Integer, Integer>>();
String query = "SELECT * FROM rating";
resultSet = statement.executeQuery(query);
Integer rating;
Integer user;
Integer item;
HashMap<Integer,Integer> innerHashMap = null;
while(resultSet.next()) {
item = resultSet.getInt(2);
user = resultSet.getInt(1);
rating = resultSet.getInt(3);
if(innerHashMap == null) {
innerHashMap = new HashMap<Integer,Integer>();
}
innerHashMap.put(user, rating);
ratings.put(item,innerHashMap);
}
// item_id = 400 , user_id = 44490. Should print rating = 4, but prints 2
System.out.println(ratings.get(400).get(44490));
return ratings;
}
謝謝@JB Nizet。 這有效:
public HashMap<Integer, HashMap<Integer, Integer>> getUserRating() throws SQLException {
HashMap<Integer,HashMap<Integer, Integer>> ratings =
new HashMap<Integer,HashMap<Integer, Integer>>();
String query = "SELECT * FROM rating";
resultSet = statement.executeQuery(query);
Integer rating;
Integer user;
Integer item;
HashMap<Integer,Integer> innerHashMap = null;
while(resultSet.next()) {
item = resultSet.getInt(2);
user = resultSet.getInt(1);
rating = resultSet.getInt(3);
if(ratings.get(item) == null) {
innerHashMap = new HashMap<Integer,Integer>();
}
innerHashMap.put(user, rating);
ratings.put(item,innerHashMap);
}
// item_id = 400 , user_id = 44490. Should print rating = 4
System.out.println(ratings.get(400).get(44490));
return ratings;
}
您應該嘗試在每次迭代中重新創建一個新的innerHashMap。
實際上,您只有一個,因此您可以在其中混合值。
if
有條件則刪除
if(innerHashMap == null) {
innerHashMap = new HashMap<Integer,Integer>();
}
由於您需要為每個項目id創建一個新的HashMap,因此您可以每次創建新的innerHashMap
while(resultSet.next()) {
item = resultSet.getInt(2);
user = resultSet.getInt(1);
rating = resultSet.getInt(3);
innerHashMap = new HashMap<Integer,Integer>(); <--- New Instance every time
innerHashMap.put(user, rating);
ratings.put(item,innerHashMap);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.