当前位置: 首页 > 面试题库 >

添加新元素时,ArrayList的所有元素都会更改吗?

党浩阔
2023-03-14
问题内容

首先,对无法提供任何源代码表示歉意。我的项目很大,将所有内容链接起来都是不切实际的,而且我还无法缩小非常烦人的问题。我将尽力在这里进行解释。

我在代码的每个循环中动态创建类的新实例。在循环中会为该实例动态地提供几个属性,例如’name’。在每个循环的最后,新生成的实例将添加到另一个第3类中保存的ArrayList中。

但是,问题在于,无论出于何种原因添加新元素时,所有先前的元素都会更改为与最新元素完全匹配。我的猜测是ArrayList正在创建对动态创建的元素的引用,以便每当元素更改时,它们都会更改,但是我不知道如何解决此问题。

再次感谢您对本解释的高质量提出任何建议和歉意。我将发布您可能希望看到的任何特定代码段

根据要求-XmlHandler.java- http:
//pastebin.com/mGmWt1RD ParsedDataSet.java =
http://pastebin.com/k1xb3KBe Content.java =
http://pastebin.com/UxiL2f9q

只是为了减少您的理解时间-
该项目是epub阅读器。正在从未显示的另一个类中的SAX解析器中调用XMLHandler。XMLHandler用于3种不同的XML集的3次不同的时间,因此那里有些混乱。

问题在于“ toc” ArrayList。“
toc”或TableOfContents包含稍后要引用的Contents实例(未显示)。我正在尝试将数据传递到“内容”的每个新实例,然后将其传递到静态ArrayList中


问题答案:

我已经看到人们多次报告这种问题,但总归结为:您实际上 不是在
创建一个新实例,而是为循环的每次迭代使用相同的实例。这是一个容易犯的错误,特别是如果您来自具有不同复制语义的语言。您可以通过多种不同的方法来犯此错误。如果您编辑问题以显示循环代码,我相信我将能够解释发生了什么。

好的,现在您已经添加了代码:问题在于,在“内容”中,所有数据成员都标记为“静态”。在Java中,这意味着所有对象共享一个变量,即,每个对象的变量值都相同。因此,实际上您
正在 创建许多要放入ArrayList的Content对象,但是它们看起来都一样!从Content的数据成员中删除那些“静态”属性,您将大功告成。



 类似资料:
  • 问题内容: 据我了解,默认容量为10,并且当其超过10时,它将创建具有新容量的新对象,依此类推。 因此,出于好奇,我输入下面的程序来检查的对象: 根据上述情况,当我未将默认初始容量设置为10时,因此在添加第11个元素时,它将创建一个新对象并增加的容量。 当我打印对象的哈希码时,每次都会给出一个新值。 以下是o / p: 根据默认容量的概念,直到第10个元素之前,都应打印相同的内容,因为在此之前不需

  • 根据我对的理解,默认容量为10,当它超过10时,它将创建一个具有新容量的新对象,依此类推。 所以出于好奇,我键入以下程序来检查对象的: 根据上述场景,当我没有为设置初始容量时,默认值为10。因此,在添加第11个元素时,它将创建一个新对象,并增加的容量。 当我打印对象的hashcode时,它每次都会给出一个新的。 以下是o/p: 根据默认容量的概念,直到第10个元素,它应该打印相同的,因为在那之前不

  • 我正在学习用java实现链表类。但每次调用get方法时,都会得到最后一个节点的内容。我不知道为什么。代码如下:, 我得到的结果是, 我想在类中添加一些数据,并创建该类的链接列表。 提前谢谢!

  • 问题内容: 我以为链表在添加元素时应该比数组表快?我只是测试了添加,排序和搜索元素(数组列表,链表,哈希集)需要多长时间。我只是对数组列表和链接列表使用java.util类…使用每个类都可以使用的两个add(object)方法。 arraylist在填充列表中执行链表…并在列表中进行线性搜索。 这是正确的吗?我在执行中做错了吗? *_ __ _ _ __ _编辑 __ * __ __ * * 我只

  • 我正在尝试使用以下方法将元素添加到名为activList的ArrayList中: 但是我在运行代码时在这一行得到了一个NullPointerExcema: 我确实读过这一页:什么是NullPointerException,如何修复它?(请不要重复报告) 我所理解的是,我得到错误是因为我的ArrayList没有任何元素。但是,我尝试在创建后立即添加一个,如下所示: 但我得到了一个错误:“意外标记:(