首页
学习
活动
专区
工具
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存储的是对象的引用,而不是对象本身。

相关搜索:如何将对象添加到另一个类的列表中?如何从C#中的另一个类创建对象的ArrayList从具有另一个对象arraylist属性的对象数组列表中获取值如何将类中的方法添加到另一个类的现有对象中python -将类对象追加到另一个类中的列表如何将对象从ArrayList移动到另一个类中的RecyclerView?Spring Boot:为什么Custom Validator类中的自动连接对象为空?为什么包含在类外部的模块将实例方法添加到类的对象中根据.net中的另一个列表过滤或删除DTO类对象中的数组对象如何获取和处理另一个类中的对象列表?将一个类的信息添加到另一个类的数组列表中如何将一个类的多个对象引用添加到flutter中的列表中?在C#中将空项添加到自定义对象的下拉列表中将另一个类引发的值添加到列表中引发NullRefernceException将一个文件中的所有对象添加到另一个文件的列表中有效地将多个项目添加到arraylist对象中,以避免向android studio java中的另一个活动发送意图时出现越界异常。如何将列表的子集添加到另一个列表中对象的属性-最佳/最快实践为什么我不能在c#中将对象添加到我的列表中?如何遍历Object类型(如类)的列表(特别是ArrayList)并收集每个对象中的特定字符串为什么当通过另一个脚本将脚本添加到选定的游戏对象时,会将该脚本添加到列表中的每个对象两次?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaArray与ArrayList10个区别

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

7.8K41

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

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

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

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

    1.3K41

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

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

    6.6K31

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

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

    30630

    【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 个学生对象 , 添加到集合 , 并遍历 打印集合方法

    41420

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

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

    4.6K30

    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.8K42

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

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

    31620

    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.2K50

    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类型作为参数),使用{}扩起集合,使用@分隔每个元素。

    30930

    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():返回列表后一个元素索引。

    64530

    Python最令人困惑操作符

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

    65310
    领券