当前位置 博文首页 > 如何在Java中改变ArrayList元素的值_酔与符号的博客:java list

    如何在Java中改变ArrayList元素的值_酔与符号的博客:java list

    作者:[db:作者] 时间:2021-08-10 13:16

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

    Integer x = i.next();

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

    x = Integer.valueOf(9);

    列表中没有更改,但x现在存储对不同对象的引用。列表没有更改。你需要使用一些列表操作方法,例如

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

    注意:这与Integer的不变性无关,正如其他人所暗示的。这只是基本的Java对象引用行为。

    这里有一个完整的例子,以帮助解释点。注意,这使用了ListIterator类,它支持在迭代期间删除/设置项目:

    import java.util.*;

    public class ListExample {

    public static void main(String[] args) {

    List fooList = new ArrayList();

    for (int i = 0; i < 9; i++)

    fooList.add(new Foo(i, i));

    // Standard iterator sufficient for altering elements

    Iterator 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 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]

    cs
    下一篇:没有了