Memory 如何在J2ME/BlackBerry中深度复制向量?

Memory 如何在J2ME/BlackBerry中深度复制向量?,memory,collections,blackberry,java-me,vector,Memory,Collections,Blackberry,Java Me,Vector,如何在J2ME/BlackBerry中深度复制向量?您需要使用循环复制向量的内容 Enumeration e = projects.elements(); while (e.hasMoreElements()) { this.projects.addElement((Project) e.nextElement()); } 需要更多信息请参见第2页回复18,答案就在那里。不幸的是,没有可靠的方法对对象向量进行深度复制 简单回顾一下我认为的“深度复制”是:深度复制是一种复制,其中不仅复制

如何在J2ME/BlackBerry中深度复制向量?

您需要使用循环复制向量的内容

Enumeration e = projects.elements();
while (e.hasMoreElements()) {
    this.projects.addElement((Project) e.nextElement());
}

需要更多信息请参见第2页回复18,答案就在那里。

不幸的是,没有可靠的方法对对象向量进行深度复制

简单回顾一下我认为的“深度复制”是:深度复制是一种复制,其中不仅复制了集合的内容(本例中为向量),而且独立复制了向量中包含的对象。换句话说:如果向量V包含A,并且制作了V的副本(V'),则V'中A的副本(A')不受A的任何更改的影响,反之亦然

通常,这将通过“克隆”对象来实现。不幸的是,如果您无法控制向量中的对象,那么您就无法合理地克隆它们,特别是因为JavaME没有可克隆的接口(据我所知)


当然,如果您确实控制了对象,您可以创建自己的可克隆接口,该接口指定一个clone()方法,该方法返回对象的完全独立副本。然后,您必须确保您的特殊克隆向量只接受实现该接口的对象。从这里开始,创建一个可以克隆自身的向量非常容易(代码方面)。

既然您将其标记为BlackBerry,而不仅仅是J2ME,那么应该提到的是BlackBerry API中有一个CloneableVector类。如果您试图坚持严格的J2ME,这将没有什么用处。然而,如果你只是针对黑莓,那么它满足了你的需求


这是对每个元素的浅拷贝。@DanG这是J2ME中最好的了,你读过Vector文档了吗?如果我读对了,我给出的代码是一个深度副本,因为两个向量是独立的。一个完整的深度副本会复制每个子元素,以及这些子元素,依此类推。任何时候都不应复制对象引用;始终为每个字段提供一份副本。由于您正在复制元素的对象引用,因此这在该级别上是一个肤浅的复制。唉,这正是我所担心的。谢谢。我可以实现一个可关闭的接口,但它的速度远不如J2ME本身的速度。这只是5.0版。现在5.0上没有那么多设备。这不是真的,它至少在4.6中,我不想再回头看看它第一次出现的时候。我只是碰巧指了指5.0文档。我收回它,它在4.3中。我很快就回来报告。
Vector MyclonedVector=CloneableVector.clone(VtoClone)