Tag: 深拷贝

Java – 实现数组的深层和浅层副本

我试图理解Java中浅层和深层复制的概念。 关于这个主题有很多文章和问答,但每当我尝试在真正的Java代码中实现这些概念时,我都不清楚一切。 我基于理解的答案之一就是在这个链接中 ,通过模式解释深度和浅层复制。 我将在每个案例的实施情况下向您展示: 浅拷贝: 我在我的例子中使用了System.arraycopy()方法,因为我在许多文章中读到它执行浅拷贝(以及克隆方法) public class Test { public static void main(String[] args) { NameValue[] instance1 = { new NameValue(“name1”, 1), new NameValue(“name2”, 2), new NameValue(“name3”, 3), }; NameValue[] instance2 = new NameValue[instance1.length]; // Print initial state System.out.println(“Arrays before shallow copy:”); System.out.println(“Instance 1: ” + Arrays.toString(instance1)); System.out.println(“Instance 2: ” + Arrays.toString(instance2)); // […]

Java Generics:通用映射(深层副本)的方法签名

我有一些Map ,它们本身可能再次包含Map (任何类型)。 我用签名写了一个方法: public static HashMap deepCopyHashMap(HashMap s); 但是,我现在想要概括这个代码以支持Map ,但仍然返回与参数类型相同的对象。 所以代替: public static HashMap deepCopyHashMap(HashMap s); public static CheckedMap deepCopyCheckedMap(CheckedMap s); public static TreeMap deepCopyTreeMap(TreeMap s); … etc. 我想要这样的东西: public static <K,V, M extends Map> M deepCopyMap(M s); 但是,这给了我: Multiple markers at this line – The type M is not generic; it cannot be […]

浅浅和平等有什么区别? 这是如何应用于缓存的?

在我的笔记中找到以下内容,但我无法理解它: 基元类型包装类为有限数量的值实现缓存。 这保证了有限数量的深度相等的包装器对象也非常相等:如果o1.equals( o2 )则o1 == o2 。 例如, new Integer( 0 ) == new Integer( 0 ) 。 一般来说,这并不总是有效。 例如,new Integer(666)== new Integer(666) 可能不会举行。 缓存的原因是它可以节省内存。 通常,缓存适用于“小”原始值。 我不明白这是什么意思,或深(.equals())和浅(==)等于之间的区别。 我知道在实践中,.equals必须用于对象,而==用于Integral值,但实际的推理却暗示了我。 我假设通过名称浅可能只检查两个值是否具有相同的类型和名称,深层检查两个变量是否指向同一个对象? 我不知道缓存会如何在这里发挥作用,或者为什么它会有用。

在java浅拷贝中是clone()吗?

java中的clone()是浅拷贝吗? 最终,这将获得Object的clone()方法(最上层的类),它创建与对象相同的类的新实例,并将所有字段复制到新实例(“浅拷贝”)。 我是从维基百科读到的。 我不明白为什么它是浅拷贝。 clone()将创建一个包含所有字段的新实例。 这只是一个很深的副本吗? 困惑。 需要一些解释。

深度复制Java的ByteBuffer复制()

java.nio.ByteBuffer#duplicate()返回一个新的字节缓冲区,它共享旧缓冲区的内容。 旧缓冲区内容的更改将在新缓冲区中可见,反之亦然。 如果我想要字节缓冲区的深层副本怎么办?

Java深拷贝库

有可以制作深拷贝的图书馆吗? ex)普通对象,数组,列表,输入流等

清除或设置null到java中的对象

我最近正在考虑释放Java对象占用的内存。 在这样做时,我对如何在Java中复制(浅/深)对象以及如何避免在对象仍处于使用状态时意外清除/无效而感到困惑。 请考虑以下方案: 将ArrayList作为参数传递给方法。 将ArrayList传递给可由线程处理的可运行类。 将ArrayList放入HashMap 。 现在在这种情况下,如果我调用list = null; 或list.clear(); ,对象会发生什么? 在这种情况下,对象会丢失,在哪种情况下只将引用设置为null? 我想这与浅层和深层复制对象有关,但在哪些情况下会发生浅层复制,在这种情况下,深层复制是否发生在Java中?

如何深度复制不规则的2D数组

如何在Java中深度复制不规则形状的2D数组? IE浏览器。 int[][] nums = {{5}, {9,4}, {1,7,8}, {8,3,2,10}} 我出于某种原因无法使用Arrays.arrayCopy() (版本化?)