草庐IT

java - 在 Java 中深度克隆多维数组......?

这个问题在这里已经有了答案:HowdoIdoadeepcopyofa2darrayinJava?(7个答案)关闭7年前。我有两个具有推断大小的多维数组(实际上它们只是二维数组)。我如何深度克隆它们?到目前为止,这是我得到的:publicfoo(Character[][]original){clone=newCharacter[original.length][];for(inti=0;i相等性测试original.equals(clone);吐出一个错误。为什么?:|

java - 我如何在 java 中创建对象的副本,而不是指针

假设我有一个我创建的对象。我在其中编辑了一些值,因此它与我引用的新对象()不同。让我们称该对象为f1。现在我希望另一个名为f2的对象是f1的副本而不是指针,这样当我更改f2中的值时,它不会同时更改f1。我将如何在Java中执行此操作? 最佳答案 首先,让你的类(class)实现Cloneable界面。没有这个,调用clone()在你的对象上会抛出异常。接下来,覆盖Object.clone()所以它返回你的特定类型的对象。实现可以简单地是:@OverridepublicMyObjectclone(){return(MyObject)s

java - 我是否发现了 java.util.Calendar 错误?

我有以下测试:importstaticorg.junit.Assert.assertEquals;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.TimeZone;importorg.junit.Test;publicclassCalendarBug{privatestaticfinalTimeZoneUTC_ZONE=TimeZone.getTimeZone("UTC");//+0hoursprivatestaticfinalTimeZoneIST_ZONE=TimeZone.getT

java - "Java concurrency in practice"- 缓存的线程安全数字分解器( list 2.8)

在以下代码中(复制自JavaConcurrencyinPractice第2章,第2.5节,list2.8):@ThreadSafepublicclassCachedFactorizerimplementsServlet{@GuardedBy("this")privateBigIntegerlastNumber;@GuardedBy("this")privateBigInteger[]lastFactors;@GuardedBy("this")privatelonghits;@GuardedBy("this")privatelongcacheHits;publicsynchronized

java - 如何复制 List 类型的 ArrayList 对象?

我研究过Java按值传递对象引用,为了制作对象的本地副本,我可以执行clone()或复制构造函数。我还查看了深/浅复制以及StackOverflow上的几篇文章。我正在看这个例子:Listlist=newArrayList();Stringone="one"list.add(one);我读过的只有几篇文章提到ArrayList实现了cloneable,但并没有真正说明如何在类型为List的情况下制作“列表”的本地副本,而不是没有实现cloneable的ArrayList。如果“list”是ArrayList类型,我可以调用clone()。ArrayListlist=newArrayLi

java - 使用复制构造函数而不是 Object.clone 进行深度复制的正确方法

我有一些代码使用Object.clone执行深层复制,但我正在尝试使用更“可接受”的复制构造函数技术重写它。下面是我正在尝试做的两个简单示例,第一个使用克隆,第二个使用复制构造函数。使用克隆的深拷贝importjava.util.*;abstractclassPersonimplementsCloneable{Stringname;publicObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}}classTeacherextendsPersonimplementsCloneable{intcourses

java - 为什么克隆阵列这么慢?

这个测试for(;;){int[]a=newint[10];System.gc();longt0=System.currentTimeMillis();for(inti=0;iArrays.copyOf显示~50毫秒,克隆显示~160毫秒。Clone是一种特殊的native拷贝方法,为什么这么慢?我在HotSpot客户端JVM1.7.0_11-b21上运行了测试。请注意,当数组的大小增加时,clone和copyOf之间的区别就消失了。 最佳答案 我在我的系统上运行了您的代码:它们之间几乎没有区别。两者都以大约30毫秒的速度计时。我的

java - 如何克隆图像?

我有一张图片。我需要精确复制它并将其保存到BufferedImage,但是没有Image.clone()。这个东西应该在一个计算循环中,所以它应该非常快,没有逐像素复制。执行此操作的最佳性能方法是什么? 最佳答案 您可以绘制到缓冲图像,因此制作一个空白的bufferedImage,从中创建图形上下文,然后将原始图像绘制到它。BufferedImagecopyOfImage=newBufferedImage(widthOfImage,heightOfImage,BufferedImage.TYPE_INT_RGB);Graphicsg

java - 如何破坏这个(非?)线程安全对象?

我回复了question较早前关于线程安全的内容并没有得到明确的答案(我认为)。所以我一直试图通过让数千个线程读取和写入该对象来说服自己设计被破坏(可见性)——但我没有得到任何意想不到的东西。这显然不能证明它是线程安全的,可能只是证明我自己的局限性!我理解重新排序的风险,但我不知道它如何适用于这种情况,因为bar()方法中的clone实例是本地的,其字段的更改在使用return发布到外部世界之前完成,之后实例实际上是不可变的。因此查看返回对象的线程会看到它的bar字段已经设置为正确的值...所以我的问题是:什么样的代码你能展示一段使用IsItSafe的代码,它可能导致2个线程查看给定I

java - 如果我想要可克隆的类,为什么我必须覆盖克隆?

如果我想要可克隆的类,为什么我必须覆盖克隆?所有类都从Object扩展,那么为什么我必须重写Object克隆方法?为什么我不能只调用原始对象的克隆方法? 最佳答案 这是JDK中众多“设计缺陷”之一。Clonable应该是一个带有clone()方法的接口(interface),但它是一个markerinterface并且Object有一个“什么都不做”的clone()方法的实现...剩下你的问题了。如果您有兴趣,thisanswer列出了java中的其他一些“错误”。 关于java-如果我