Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change value of ArrayList element in java

Tags:

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 

Value 9 is not updating.

like image 445
prateeksarda Avatar asked Oct 07 '12 20:10

prateeksarda


People also ask

How do you change a value in an array in Java?

If you want to change the size, you need to create a new array of the desired size, and then copy elements from the old array to the new array, and use the new array. In our example, arr can only hold int values. Arrays can hold primitive values, unlike ArrayList, which can only hold object values.

How do you modify an ArrayList while iterating?

Replace element in arraylist while iterating Do not use iterator if you plan to modify the arraylist during iteration. Use standard for loop, and keep track of index position to check the current element. Then use this index to set the new element. Java program to search and replace an element in an ArrayList.


1 Answers

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

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] 
like image 130
Duncan Jones Avatar answered Oct 07 '22 02:10

Duncan Jones