复制Java Hashtable

时间:2011-02-08 09:55:13

标签: java hashtable duplicates

我对Java中的重复Hashtables有疑问(可能是重复的Java集合)。

我的Hashtable有这样的对:

  • 键:字符串
  • 值:C
  • 类型的对象

C看起来像这样:

public interface A extends Cloneable, Serializable{...}

public abstract class B implements A{...}

public class C extends B{...}

我想使用new Hashtable(Map t)将此哈希表复制到具有相同内容的另一个变量中。 我的问题是:值对象进行此操作的条件是什么?我可以使用Hashtable复制构造函数吗?

我可以使用SerializationUtils.clone作为值,但执行时间太长。

提前致谢。

3 个答案:

答案 0 :(得分:6)

如果您不需要深层复制,那么使用new Hashtable(Map t)应该可以正常工作。

SerializationUtils.clone()序列化并反序列化Map引用的整个对象图,这就是为什么需要这么长时间。它创建了一个真正的深层拷贝,但是(如果你的课程中没有有趣的序列化内容)。

答案 1 :(得分:1)

如果您的C类或其中一个接口也提供了一个公共.clone()方法(这确实可以满足您对单个C对象的要求),那么一个没有序列化的简单方法就是这样(使用HashMap而不是Hashtable,但这并不重要):

/**
 * deeply clones a Map by cloning all the values.
 */
public Map<String,C> deepCopy(Map<String, C> original) {
    Map<String, C> copy = new HashMap<String, C>(original.size());
    for(Map.Entry<String, C> entry : original.entries()) {
        copy.put(entry.getKey(), entry.getValue().clone());
    }
}

答案 2 :(得分:0)

你可以使用new Hashtable(Map t),只要知道第二个Hashtable将包含与第一个相同的实例(不是对象的副本)......

顺便说一句,您应该考虑使用HashMap而不是Hashtable,Hashtable是一个较旧的类,它在HashMap是非同步的等价物时被同步,另一个区别是HashMap也允许使用空...