编辑:整个代码和数据库创建脚本可以从http://gitorious.org/scheator找到.数据库脚本位于Schema /中.
我有以下Java代码:
LinkedHashMap在抽象类中定义为
LinkedHashMap<Object, Data> list;
一个初始化此列表的后代类,如下所示:
list = new LinkedHashMap<Integer, Data>();
我添加这样的项目:
String id = rs.getString(FIELDS[0]);
String name = rs.getString(FIELDS[1]);
Data team = new Data(Integer.parseInt(id.trim()), name);
list.put(id, team);
现在当我这样做:
System.err.println("delete() count: " + list.size());
System.err.println("delete() key value " + key);
Data obj;
obj = (Data)list.remove(key);
deletedList.put(key, obj);
System.err.println("delete() count: " + list.size());
没有从列表中删除任何内容,即第一个和最后一个打印件打印相同的大小().密钥也是正确的(我已经验证了该ID的项目).
但是,这是我的问题,如果我添加这样的值:
Integer id = rs.getInt(FIELDS[0]);
String name = rs.getString(FIELDS[1]);
Data team = new Data(id, name);
list.put(id, team);
代码有效! parseInt()不应该生成类似于getInt()的键吗?为什么第二个版本有效,但第一个版本没有?我花了一个小时调试这个,直到找到原因,我仍然无法弄清楚原因.
解决方法:
Yanamon是对的.你看the diff时很清楚:
while (rs.next()) {
- String id = rs.getString(FIELDS[0]);
+ Integer id = rs.getInt(FIELDS[0]);
String name = rs.getString(FIELDS[1]);
- Data team = new Data(Integer.parseInt(id.trim()), name);
+ Data team = new Data(id, name);
list.put(id, team);
请注意,在原始版本中,int(自动装箱为Integer)正在传递给Data构造函数.但正在推出的id仍然是一个字符串.