如何在java中更改ArrayList元素的值 [英] How to change value of ArrayList element in java

查看:39
本文介绍了如何在java中更改ArrayList元素的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮助我使用下面的代码,即使更改值后我也得到相同的输出

Please help me with below code , I get the same output even after changing the value

import java.util.*;

class Test {
    public static void main(String[] args) {
        ArrayList<Integer> a = new ArrayList<Integer>();

       // added 0-9 to ArrayList        
          for(int i=0;i<9;i++)
            a.add(new Integer(i));

        // initialize the Iterator
        Iterator<Integer> i = a.iterator();

        // changed the value of first element in List
        if(i.hasNext()) {
            Integer x = i.next();
            x = Integer.valueOf(9);
        }

        // initialized the iterator again and print all the elements
        i = a.iterator();
        while(i.hasNext())
            System.out.print(i.next());
    }
}    

//Output : 012345678

值 9 未更新.

推荐答案

该列表正在维护对存储在列表中的原始值的对象引用.所以当你执行这一行时:

The list is maintaining an object reference to the original value stored in the list. So when you execute this line:

Integer x = i.next();

x 和列表都存储对同一对象的引用.但是,当您执行:

Both x and the list are storing a reference to the same object. However, when you execute:

x = Integer.valueOf(9);

列表中没有任何变化,但 x 现在存储对不同对象的引用.名单没有改变.您需要使用一些列表操作方法,例如

nothing has changed in the list, but x is now storing a reference to a different object. The list has not changed. You need to use some of the list manipulation methods, such as

list.set(index, Integer.valueof(9))

注意:正如其他人所建议的那样,这与 Integer 的不变性无关.这只是基本的 Java 对象引用行为.

Note: this has nothing to do with the immutability of Integer, as others are suggesting. This is just basic Java object reference behaviour.

这是一个完整的例子,有助于解释这一点.请注意,这使用了 ListIterator 类,支持在迭代中删除/设置项目:

Here's a complete example, to help explain the point. Note that this makes use of the ListIterator class, which supports removing/setting items mid-iteration:

import java.util.*;

public class ListExample {

  public static void main(String[] args) {

    List<Foo> fooList = new ArrayList<Foo>();
    for (int i = 0; i < 9; i++)
      fooList.add(new Foo(i, i));

    // Standard iterator sufficient for altering elements
    Iterator<Foo> iterator = fooList.iterator();

    if (iterator.hasNext()) {
      Foo foo = iterator.next();
      foo.x = 99;
      foo.y = 42;
    }

    printList(fooList);    

    // List iterator needed for replacing elements
    ListIterator<Foo> listIterator = fooList.listIterator();

    if (listIterator.hasNext()) {
      // Need to call next, before set.
      listIterator.next();
      // Replace item returned from next()
      listIterator.set(new Foo(99,99));
    }

    printList(fooList);
  }

  private static void printList(List<?> list) {
    Iterator<?> iterator = list.iterator();
    while (iterator.hasNext()) {
      System.out.print(iterator.next());
    }
    System.out.println();
  }

  private static class Foo {
    int x;
    int y;

    Foo(int x, int y) {
      this.x = x;
      this.y = y;
    }

    @Override
    public String toString() {
      return String.format("[%d, %d]", x, y);
    }
  }
}

这将打印:

[99, 42][1, 1][2, 2][3, 3][4, 4][5, 5][6, 6][7, 7][8, 8]
[99, 99][1, 1][2, 2][3, 3][4, 4][5, 5][6, 6][7, 7][8, 8]

这篇关于如何在java中更改ArrayList元素的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆