正如标题所示,我想知道 add 方法是否会复制元素并将副本添加到 ArrayList 中,或者出于明显的性能原因复制对对象的引用。谢谢!
最佳答案
不,不会进行任何复制或克隆。引用本身被简单地添加到列表中:
442 public boolean add(E e) {
443 ensureCapacityInternal(size + 1); // Increments modCount!!
444 elementData[size++] = e; // **********
445 return true;
446 }
在第 444 行,您可以看到实际引用被放置为 ArrayList 内部数据数组的一项。
否则该集合将无法工作,因为它不包含对实际感兴趣对象的引用,而是包含对副本的引用。顺便说一句,所有这些都可以通过查看您可用的源代码来回答,无论是在您的驱动器 src.zip 上还是在线 here 。其次,您的帖子表明添加副本可以提高性能。如果是这样,你为什么会这么想?
<小时/>编辑
在评论中您指出:
Maybe I was misunderstood, I meant that it was way quicker to copy the reference to the object.
而不是做什么?我不确定您还设想什么其他选择。对象由引用表示,因此没有其他方法来传递它们。
关于java - (Java) ArrayList<obj> 中 add(obj o) 方法的内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467705/