我正在从数据库中的表中检索数据,并将整行添加到TreeMap
。
我正在使用以下代码:
ArrayList<String> listaValores = new ArrayList();
TreeMap<Integer, ArrayList> tmValores = new TreeMap<>();
(...)
while (rs.next())
{
listaValores.clear();
for(int i=2; i<=ncolunas; i++)
{
listaValores.add(rs.getString(i));
}
tmValores.put(rs.getInt(1), listaValores);
}
我的TreeMap
键被很好地插入,但是这些值总是作为SELECT * FROM Table查询的结果重复为最后一行的值。
所以,如果我的表是:
id | name | last name |
1 | joe | lewis |
2 | mark | spencer |
3 | mike | carter |
4 | duke | melvin |
我的TreeMap
包含:
1=> duke, melvin
2=> duke, melvin
3=> duke, melvin
4=> duke, melvin
而不是(我想要的)
1=> joe, lewis
2=> mark, spencer
3=> mike, carter
4=> duke melvin
有人能指出我的问题在哪里吗?
答案 0 :(得分:6)
我认为你必须重新分配listaValores
的价值。
只需更改
listaValores.clear();
到
listaValores = new ArrayList<String>();
答案 1 :(得分:4)
Java中的对象作为引用传递,因此您实际上为地图中的所有键添加了相同的列表。
由于你在每一步都清除它,然后为它添加一些值,它将在while循环结束后仅包含最后一行。
您真正想要做的是为每一行创建ArrayList
的实例并将其添加到地图中,而不是清除旧版本中的值:
while (rs.next())
{
listaValores = new ArrayList<String>();
for(int i = 2; i <= ncolunas; i++)
{
listaValores.add(rs.getString(i));
}
tmValores.put(rs.getInt(1), listaValores);
}