我对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
作为值,但执行时间太长。
提前致谢。
答案 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也允许使用空...