java - (Java) ArrayList<obj> 中 add(obj o) 方法的内部工作

标签 java performance arraylist copy addition

正如标题所示,我想知道 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/

相关文章:

java - 如何在json和java中创建子项,以及如何在javascript中获取子项的值?

php - MySQL随机插入查询耗时较长

css - 为每个元素重置边距和填充。最有效的方法

javascript - 位置置顶

java - 如何在空类构造函数中初始化 List<E>?

java - Spring MVC : X-Content-Type-Options problems, JavaScript 未加载

java - 当我处理 BatchUpdateException 时,executeBatch() 期间出现 SQLException

java - 动态转换为对象 ArrayList 中未知的类

java - 如何管理文件中的空行

java - 确定 ArrayList 是否有序的通用方法 (Java)