Ema*_*Ema 0 java mysql hashmap overwrite
我想创建一个HashMap,其中键是一个字符串,值是一个List.所有值都来自Mysql表.问题是我有一个HashMap,其中键是正确的,而值不是正确的,因为它被覆盖.事实上,我对所有不同的键具有相同内容的相同列表.这是代码:
public static HashMap<String,List<Table_token>> getHashMapFromTokenTable() throws SQLException, Exception{
DbAccess.initConnection();
List<Table_token> listFrom_token = new ArrayList();
HashMap<String,List<Table_token>> hMapIdPath = new HashMap<String,List<Table_token>>();
String query = "select * from token";
resultSet = getResultSetByQuery(query);
while(resultSet.next()){
String token=resultSet.getString(3);
String path=resultSet.getString(4);
String word=resultSet.getString(5);
String lemma=resultSet.getString(6);
String postag=resultSet.getString(7);
String isTerminal=resultSet.getString(8);
Table_token t_token = new Table_token();
t_token.setIdToken(token);
t_token.setIdPath(path);
t_token.setWord(word);
t_token.setLemma(lemma);
t_token.setPosTag(postag);
t_token.setIsTerminal(isTerminal);
listFrom_token.add(t_token);
System.out.println("path "+path+" path2: "+token);
int row = resultSet.getRow();
if(resultSet.next()){
if((resultSet.getString(4).compareTo(path)!=0)){
hMapIdPath.put(path, listFrom_token);
listFrom_token.clear();
}
resultSet.absolute(row);
}
if(resultSet.isLast()){
hMapIdPath.put(path, listFrom_token);
listFrom_token.clear();
}
}
DbAccess.closeConnection();
return hMapIdPath;
}
Run Code Online (Sandbox Code Playgroud)
您可以在下面找到HashMap内容的示例:
键:p000000383内容:[t0000000000000019231,t0000000000000019232,t0000000000000019233]
键:p000000384内容:[t0000000000000019231,t0000000000000019232,t0000000000000019233]
"内容"中的值位于Mysql表的最后一行中,用于相同的键.
mysql> select * from token where idpath='p000003361';
+---------+------------+----------------------+------------+
| idDoc | idSentence | idToken | idPath |
+---------+------------+----------------------+------------+
| d000095 | s000000048 | t0000000000000019231 | p000003361 |
| d000095 | s000000048 | t0000000000000019232 | p000003361 |
| d000095 | s000000048 | t0000000000000019233 | p000003361 |
+---------+------------+----------------------+------------+
3 rows in set (0.04 sec)
Run Code Online (Sandbox Code Playgroud)
您需要listFrom_token每次分配一个新的而不是clear()它.替换这个:
listFrom_token.clear();
Run Code Online (Sandbox Code Playgroud)
有:
listFrom_token = new ArrayList<Table_token>();
Run Code Online (Sandbox Code Playgroud)
把在列表中HashMap并没有使列表的副本.您正在一遍又一遍地清理并重新填充相同的清单.