How to change value of ArrayList element in java

前端 未结 7 1914
清酒与你
清酒与你 2020-12-02 09:57

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[] a         


        
7条回答
  •  孤街浪徒
    2020-12-02 10:31

    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();
    

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

    x = Integer.valueOf(9);
    

    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))
    

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


    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 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);
        }
      }
    }
    

    This will print:

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

提交回复
热议问题