【问题标题】:ArrayLists, setting a value on one ArrayList changes a value on anotherArrayLists,在一个 ArrayList 上设置一个值会更改另一个上的值
【发布时间】:2011-10-16 21:42:21
【问题描述】:

正如标题所说,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。

一些信息:这些是Entry 类型的ArrayList,每个都包含一个数量和一个值(即括号中的内容)。我正在尝试打开这个数组: [(5,2)(2,5)(3,2)]

进入这些 [(1,2)] 和 [(4,2)(2,5)(3,2)]。在这种情况下,i == 1,remainingAmt == 1。

ArrayList<Entry> firstHalf = new ArrayList<Entry>();
    ArrayList<Entry> secondHalf = new ArrayList<Entry>();

    for(int j = 0; j<=i;j++){
        firstHalf.add(rleAL.get(j));
    }
    for(int k = i; k<rleAL.size(); k++){
        secondHalf.add(rleAL.get(k));
    }
    System.out.println(firstHalf);//gives (5,2)
    firstHalf.get(i).setAmount(remainingAmt);
    System.out.println(firstHalf);//gives (1,2) *CORRECT*
    secondHalf.get(0).setAmount(rleAL.get(i).getAmount() - remainingAmt);
    System.out.println(firstHalf);//gives (0,2) *WRONG*

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    没有什么不寻常的——如果底层对象在列表之间共享,一个对象的变化将反映在另一个对象中。如果您需要独立的列表,则需要通过从头开始创建新对象或将初始对象复制到列表 #2 中的新对象来在每个列表中使用不同的对象。

    【讨论】:

    • @dylanddrop 没问题 - 无论经验如何,您都会惊讶于人们经常绊倒。
    【解决方案2】:

    这里唯一的问题是你的标题。您根本没有“在一个 ArrayList 上设置值”。您已经在一个对象中设置了一个值,它是两个 ArrayList 的成员,所以它当然会同时出现在两者中。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多