今天在封装一段代码时遇到这样一个问题
在Tools类中为了实现map和list嵌套 用map对象反复将数据放入list中 我用了这样一段代码
LIst<Map<String,int>> list=new List<Map<String,int>>();
MapString,int>map=new Map<String,int>();
rs=stat.executeQuery(sql);
ResultSetMetaData rsmd=rs.getMetaData();
int t=0;
int count =rsmd.getColumnCount();
While(rs.next()){
for(int i=1;i<=count;i++){
Map.clear();
String name=rsmd.getColumnName(i);
int type=rsmd.getColumnType(i);
switch(type){
case java.sql.Types.INTEGER:
int values=rs.getInt(name);
map.put(name, values);
}
List.add(map);
}
以上有一些为连接数据库的语言 意思也就是把数据库中的表的数据放入map和list嵌套的结构之中 最后发现 这个list只多次存储了同一个对象 其中调试了很久 最后发现 将map.clear()换成map的定义函数就行了 我原本以为map定义一次即可 每次存进list之后即可销毁重新存入值 然而list中add函数只是将map的物理位置告诉了map 里面存的元素一旦改变 list中的元素随之改变 这样 当map。Clear执行 list即清空 解决的办法就是每次要向list中添加数据 只有定义一个新的map对象 虽然对象名字都为map 但是彼此的物理位置不同 在往list添加数据时互不干扰 这样 便完成了map和list的嵌套