首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么ArrayList仍然是空的,而将另一个类中的对象添加到列表中仍然有效?

ArrayList是Java中的一个动态数组,它可以存储任意类型的对象。当我们创建一个ArrayList对象时,它的初始大小为0,即为空。

在Java中,对象是通过引用来传递的。当我们将一个类的对象添加到ArrayList中时,实际上是将该对象的引用添加到了列表中。这意味着,即使原始对象被修改或删除,列表中的引用仍然有效。

所以,当你将另一个类中的对象添加到ArrayList中时,即使原始ArrayList仍然为空,列表中仍然有效地存储了该对象的引用。这是因为ArrayList只是存储了对象的引用,并没有复制对象本身。

举个例子来说明:

代码语言:txt
复制
class MyClass {
    int value;
    
    public MyClass(int value) {
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<MyClass> list = new ArrayList<>();
        MyClass obj = new MyClass(10);
        
        list.add(obj);
        obj.value = 20;
        
        System.out.println(list.get(0).value);  // 输出结果为20
    }
}

在上面的例子中,我们创建了一个ArrayList对象list和一个MyClass对象obj。我们将obj添加到list中,并修改了obj的value属性。然后,我们通过list获取到了obj,并打印了它的value属性。由于list中存储的是obj的引用,所以当我们修改obj的属性时,list中的引用也会反映出这个改变。

总结一下,ArrayList仍然是空的,是因为它的大小为0,没有存储任何对象。但是,将另一个类中的对象添加到列表中仍然有效,是因为ArrayList存储的是对象的引用,而不是对象本身。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaArray与ArrayList10个区别

因为ArrayList是一个,所以它拥有所有属性,例如,您可以创建对象和调用方法,但是Array是Java对象,它不提供任何方法。...ArrayList内存需求也不仅仅是用于存储相同数量对象数组,例如int[]与ArrayList相比,int[] 存储20个INT变量所需内存更少,这是因为ArrayList和wrapper对象元数据开销很大...例如,int []数字有效,但intArrayList无效。您如何处理这个问题?假设您想将int原语存储到ArrayList,那又如何呢?好了,在Java您可以使用包装器。...10、维度 数组和数组列表之间另一个显着区别是,数组可以是多维,例如,您可以具有二维数组或三维数组,这可以表示矩阵和2D地形非常特殊数据结构。...,则没有索引搜索仍然是LOG(N) 。

7.6K41

Java 编程思想第十二章 - 容器持有对象

例如数组,这种编译器支持类型,是保存一组对象有效方式,如果想要保存一组基本类型数据,也推荐使用数组。...尽管在 Java 没有直接关键字支持,但集合仍然是可以显著增强编程能力基本工具。 1 泛型和类型安全集合 Java5 之前集合一个主要问题是编译器准许SE向集合插入不正确类型。...因此,可以将 Apple 子类型添加到被指定为保存 Apple 对象集合。...这种方式并非总是有效,因为某些具体有额外功能。 例如, LinkedList 具有 List 接口中未包含额外方法,而 TreeMap 也具有在 Map 接口中未包含方法。...Collections.addAll() 方法接受一个 Collection 对象,以及一个数组或是一个逗号分隔列表,将其中元素添加到 Collection

1.3K20

Java8编程思想精粹(十)-容器(上)

例如数组,这种编译器支持类型,是保存一组对象有效方式,如果想要保存一组基本类型数据,也推荐使用数组。...尽管在 Java 没有直接关键字支持,但集合仍然是可以显著增强编程能力基本工具。 1 泛型和类型安全集合 Java5 之前集合一个主要问题是编译器准许SE向集合插入不正确类型。...因此,可以将 Apple 子类型添加到被指定为保存 Apple 对象集合。...这种方式并非总是有效,因为某些具体有额外功能。 例如, LinkedList 具有 List 接口中未包含额外方法,而 TreeMap 也具有在 Map 接口中未包含方法。...Collections.addAll() 方法接受一个 Collection 对象,以及一个数组或是一个逗号分隔列表,将其中元素添加到 Collection Collection 构造器可以接受另一个

1.2K41

金九银十: 50 个JS 必须懂面试题为你助力

当我妈妈叫沙雕时候,虽然我名字叫小智,但这并不是说我就突然就克隆了一个自己:我仍然是我,只是可以用不同名字来称呼我而已。...() 和call()方法一样,只是参数列表不同,语法: Function.apply(obj[, argArray]); 说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个...## 问题44:如何在JS清空数组 有许多方法可以用来清空数组: 方法一: ```javascript arrayList = [] 上面的代码将把变量arrayList设置为一个新数组。...如果在其他任何地方都没有对原始数组arrayList引用,则建议这样做���因为它实际上会创建一个新数组。...问题49:为什么要将JS源文件全部内容包装在一个函数 这是一种越来越普遍做法,被许多流行JS库所采用。

6.5K31

数据结构思维 第九章 `Map`接口

MyLinearMap实现Map,这意味着它必须提供Map接口中方法。 MyLinearMap对象具有单个实例变量,entries,这是一个EntryArrayList对象。...但是没关系:两个线性运算仍然是线性。 总而言之,核心方法都是线性,这就是为什么我们将这个实现称为MyLinearMap(嗒嗒!)。...实际上我们所说是,你可以在常数时间内大海捞针,不管海有多大。这是魔法。 我们不是将条目存储在一个大List,而是把它们分解成许多短列表。...对于每个键,我们将使用哈希码(在下一节中进行说明)来确定要使用列表。 使用大量简短列表比仅仅使用一个更快,但正如我将解释,它不会改变增长级别;核心功能仍然是线性。...在下一章,我将介绍一种解决方案,分析Map核心方法性能,并引入更有效实现。

29430

【Java】常用API——ArrayList

本期介绍 本期主要介绍常用API——ArrayList 文章目录 1. 引入——对象数组 2. 什么是ArrayList 3. ArrayList使用步骤 4. 常用方法和遍历 5. ...ArrayList练习 数值添加到集合 对象添加到集合 打印集合方法 获取集合方法 1. ...为了解决这个问题, Java 提供了另一个容器 java.util.ArrayList 集合 , 让我们可以更便捷存 储和操作对 象数据。 2. ...代码如下: 查看构造方法 public ArrayList() :构造一个内容为集合。 基本格式 : 在JDK 7后,右侧泛型尖括号之内可以留空,但是仍然要写。...ArrayList练习 数值添加到集合 生成 6 个 1~33 之间随机整数 , 添加到集合 , 并遍历 对象添加到集合 自定义 4 个学生对象 , 添加到集合 , 并遍历 打印集合方法

39420

50 个JS 必须懂面试题为你助力金九银十

当我妈妈叫沙雕时候,虽然我名字叫小智,但这并不是说我就突然就克隆了一个自己:我仍然是我,只是可以用不同名字来称呼我而已。...() 和call()方法一样,只是参数列表不同,语法: Function.apply(obj[, argArray]); 说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个...问题44:如何在JS清空数组 有许多方法可以用来清空数组: 方法一: arrayList = [] 上面的代码将把变量arrayList设置为一个新数组。...如果在其他任何地方都没有对原始数组arrayList引用,则建议这样做,因为它实际上会创建一个新数组。...问题49:为什么要将JS源文件全部内容包装在一个函数 这是一种越来越普遍做法,被许多流行JS库所采用。

4.4K30

Java 8教程

大多数OOP语言围绕对象和实例进行演化,仅对待他们一Streams公民。另一个重要实体即功能占据了位置。这在java尤其如此,其中函数不能存在于对象之外。...2.它们为您提供了一种非常需要功能,即使在不接触代码情况下也可以添加多个功能。只需在界面添加一个默认方法即可实现。 为什么java 8需要默认方法? 这是下一个面试问题好候选人。...默认方法打破了这个死锁,并允许在核心添加对函数式接口支持。我们来看一个例子。下面是一个添加到java.lang.Iterable方法。...code reduced to one line list.forEach((Moveable p) -> p.move()); } } 所以在这里,一个额外方法已添加到列表...为什么?因为这些抽象方法之一“equals()”在Object具有与public方法相同签名。 例如下面的界面是一个有效函数式接口。

1.7K42

数据结构思维 第四章 `LinkedList`

有效地从列表删除node.next,它可以被垃圾回收。 最后,我们减少size并返回我们在开始时检索元素。 那么,remove增长级别是什么呢?...setup方法执行在启动计时之前所需任何工作;这里它会创建一个列表。然后timeMe执行我们试图测量任何操作;这里它将n个元素添加到列表。...但是下一次练习不需要太多知识;即使你不喜欢匿名,也可以复制和修改示例代码。 下一步是创建Profiler对象,传递Timeable对象和标题作为参数。...图 4.1 分析结果:将n个元素添加到ArrayList末尾运行时间与问题规模。 下一节解释了如何解释它。...在ProfileListAdd.java,你会发现一个方法profileArrayListAddBeginning。

29520

Java 泛型示例 - 泛型方法,,接口

因此,如果我们尝试在列表添加任何其他类型对象,则该程序将引发编译时错误。还要注意,在循环中,我们不需要列表中元素类型转换,因此在运行时删除了ClassCastException。 2....Java泛型绑定类型参数 假设我们要限制可以在参数化类型中使用对象类型,例如在比较两个对象方法,并且我们要确保接受对象是可比较。...请注意,对于上界列表,除之外,我们不允许将任何对象添加到列表。如果我们尝试在sum方法内将元素添加到列表,则该程序将无法编译。...我们使用超级关键字和下限泛型通配符(?)来实现此目的。 我们可以传递下界或下界任何超类型作为参数,在这种情况下,java编译器允许将下界对象类型添加到列表。...>[] array = new ArrayList[10]无法编译 这是所有的Java泛型,Java泛型是非常庞大,需要大量时间来了解和有效地使用它。

2.6K50

【Java提高十六】集合List接口详解

在编写java程序,我们最常用除了八种基本数据类型,String对象外还有一个集合,在我们程序到处充斥着集合身影!...ArrayList(int initialCapacity):构造一个具有指定初始容量列表ArrayList(Collection<?...该构造函数首先会调用LinkedList(),构造一个列表,然后调用了addAll()方法将Collection所有元素添加到列表。以下是addAll()源代码: ?...elementCount:Vector 对象有效组件数。 capacityIncrement:向量大小大于其容量时,容量自动增加量。...---- Stack详解: 在JavaStack表示后进先出(LIFO)对象堆栈。栈是一种非常常见数据结构,它采用典型先进后出操作方式完成

1.1K31

13 Java 集合

集合框架体系概述 为什么出现集合? 方便多个对象操作,就对对象进行存储,集合就是存储对象最常用一种方法. 数组和集合类同时容器, 有何不可?...ArrayList详解:拥有角标的方法是其特有方法 可变长度数组原理 :当元素超出数组长度,会产生一个新数组,将原数组数据复制到新数组,再将新元素添加到新数组。...ArrayList:是按照原数组 50%延长构造一个初始容量为10列表。...BlockingQueue 接口定义了一个超时版 poll() 方法,在指定时间内等待元素添加到队列。...java.lang.System 定义了一个 arraycopy() 方法,作用是把一个数组指定元素复制到另一个数组指定位置。

2.3K20

ArrayList并发写出现Null值

复制了两份,所以数组索引仍然是更新前size)。...由于ArrayList是基于数组实现,由于数组大小一旦确定就无法更改,所以其每次扩容都是将旧数组容器元素拷贝到新大小数组(Arrays.copyOf函数),由于我们通过new ArrayList<...是旧,并不是第一次扩容后对象,于是会因为第一次插入值并不在旧elementDate而将null值更新到新数组。...这里我们举一个详细例子: 现在有线程A和B分别要插入元素1和2,当线程A调用add方法时size是0,于是会进行一次扩容,此时线程B调用add方法时size仍然是0,所以也会进行扩容,假设此时线程A比线程...B扩容先完成,此时listelementDate是新数组对象(由线程A构建),然后开始执行elementDate[size++] = 1程序,这个过程中线程B扩容拿到数组仍然是elementDate

2.1K50

Java-持有对象

Collection.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分隔列表,将元素添加到Collection。...containsAll() 判断一个列表是否在某个列表 retainAll() 一种有效交集操作 removeAll() 将从List移除在参数List所有元素 addAll() 追加列表到末尾...() 返回列表头(第一个元素),如果列表,则报异常 removeFirst() 移除并返回列表头,而在列表时报异常 addFirst() 将某个元素插入到列表头部 addLast()...将某个元素插入到列表尾部 removeLast() 移除并返回列表尾部,而在列表时报异常 8....队列常被当作一种可靠对象从程序某个区域传输到另一个区域途径。队列在并发编程特别重要。

1.1K10

JDK1.9-常用ArrayList

为了解决这个问题,Java提供了另一个容器java.util.ArrayList ,让我们可以更便捷存储和操作对象数据 4.2 什么是ArrayList java.util.ArrayList 是大小可变数组实现...代码如下: ArrayListArrayList 查看构造方法 public ArrayList() 构造一个内容为集合。...基本格式: ArrayList list = new ArrayList(); 在JDK 7后,右侧泛型尖括号之内可以留空,但是仍然要写。...ArrayList对象时,指定了什么数据类型,那么add(E e)方法,只能添加什么数据类型对象。...自定义4个学生对象,添加到集合,并遍历 打印集合方法 定义以指定格式打印集合方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。

30430

Python最令人困惑操作符

虽然元组不是可变对象,但有一个关键区别是许多程序员在观察时忽略。虽然元组本身可能不是可变,但其中类型仍然是可变。元组仍然是一个数据结构,该元组数据仍然属于其各自类型。...z = (5, 10, 15) z[4] = 15 然而,为了证明元组包含数据仍然是可变,如果我们要从元组取出一些数据,我们可以对它进行修改: newnum = z[3] newnum = z...但是,其中列表,一个字母在字母L后面,另一个字母在字母L前面,仍然是可变。如果我们现在试着在这张单子上再加一封信,你觉得会发生什么?...换句话说,我们可能遇到了异常,但如果我们现在从元组打印出列表,我们将看到元素实际上已经被添加到列表: print(letters[0]) ['S', 'T', 'Q'] 需要注意是,它不能直接处理数据类型...这就是为什么正等号这么棒部分原因! 仔细看看 04 现在我们已经知道了加号等于运算符有多奇怪,为了更好地理解其用法怪异之处,让我们来看看该运算符实际上是如何工作

63710

List集合

因为添加到集合1,2,3,4已经自动装箱为Integer对象了,所以如果要删除元素2,那么可以通过list.remove(Integer.valueOf(2))方法实现或使用迭代器配合equals...在构建ArrayList集合对象时,如果没有显示指定容量,那在JDK1.6及其之前版本内部数组初始化容量默认为10,之后版本初始化容量为长度为0数组,在添加第一个元素时再创建一个长度为10数组...boolean empty() 堆栈是否为 int search(Object o) 对象到堆栈顶部位置,以1为基数;返回值-1则表示此对象不在堆栈 import java.util.EmptyStackException...int previousIndex():返回列表前一个元素索引。 boolean hasNext():判断有没有下一个元素。 Object next():返回列表最后一个元素。...int nextIndex():返回列表后一个元素索引。

63030
领券