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.
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.
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.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With