After adding the object into my list I am changing the data in the list it is getting modified I have the code like
List<Data> oldList = // initializing the list List<Data> newList = // initializing the list for (Data data: oldList) { if (condition) { data.setvalue(""); newList.add(data); data.setAnother(); } }
If I am doing like this, the data object in the newList
also is getting changed.
I have a requirement that it should be changed in the oldList
but it should not change the data in the newList
.
Advertisement
Answer
If you don’t want the objects in the newList
get affected while changing the object from the oldList
, then need to create a copy of each object that should be added to the newList
.
For that, you can implement a copy-constructor (a constructor that expects an object of the same type as an argument) in the Data
class or make it implement Clonable
interface (but this approach has some serious pitfalls see here – paragraph “Copy Constructor versus Cloning”).
Assuming that you’ve implemented a copy-constructor, your code might be written like this:
List<Data> oldList = // initializing the list List<Data> newList = // initializing the list for (Data data: oldList) { if (condition) { Data copyForNewList = new Data(data); // creating a copy of the data object copyForNewList.setvalue(""); // changing the copy newList.add(copyForNewList); // string the copy data.setAnother(); // mutating the original object } }