在做数据库时用到HashMap模仿一张表,现在需要对内存中的HashMap tablel1进行深层次的复制,产生另外一个完全一样的HashMap table2,前提是table2也许跟table1只相差一点点,一个接一个的子内容进行复制可能很费时,但是里面提供的clone()方法好像只能潜层次的进行复制,各位大侠有没有什么好的建议,在此恭候了!

解决方案 »

  1.   

    table2也许跟table1只相差一点点?那clone()后再替换掉不同的
      

  2.   

    clone()不是对于一些引用只能复制引用,不能复制内容吗?
      

  3.   

    HashMap本身就实现了深克隆的阿,不信你去看看它的代码
      

  4.   

    我看过了,好像里面的对于(key,value)是直接用e.value = value;赋值的,对于引用来说,应该就没有产生新的对象,而只是用新的指针也指向了它,所以感觉对于纯值clone()来说,是深层复制,但是对于存储引用的来说就不是深层的啦,不知道我的想法对不对。
        private void putForCreate(Object key, Object value) {
            Object k = maskNull(key);
            int hash = hash(k);
            int i = indexFor(hash, table.length);        /**
             * Look for preexisting entry for key.  This will never happen for
             * clone or deserialize.  It will only happen for construction if the
             * input Map is a sorted map whose ordering is inconsistent w/ equals.
             */
            for (Entry e = table[i]; e != null; e = e.next) {
                if (e.hash == hash && eq(k, e.key)) {
                    e.value = value;
                    return;
                }
            }        createEntry(hash, k, value, i);
        }
      

  5.   

    确实,是我记错了,HashMap这样实现是出于效率和节省内存空间。如果要实现真正的深克隆,只有自己去做循环一个一个的clone了