Java LinkedHashMap:这两者有什么区别?

编辑:整个代码和数据库创建脚本可以从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仍然是一个字符串.

上一篇:java – 在LinkedHashMap中使用双链接列表而不是单个LinkedList


下一篇:java – 为什么我们在LinkedHashMap中需要hashcode和bucket概念