Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 403
  • Last Modified:

ConcurrentModificationException while using addAll method

                 these loop will read the values from the form and put it in requestList.
                  
                  for (int i = 1; i <= 1; i++) {
                         cdtls= new ContainerDetails();
                         cdtls.setContainerType(request.getParameter("ContainerType_"+i+"_1"));
                         cdtls.setContainerNumber(request.getParameter("ContainerNumber_"+i+"_2"));
                         cdtls.setContainerDesc(request.getParameter("ContainerDescription_"+i+"_3"));
                         AL.add(cdtls);
                  }

                         ArrayList requestList=al;

                        //this list will give me first 10 records for the particular booking id;

                         ArrayList dataBaseList =DAO.getDBDetails(bookingId);

                  
                  ArrayList addList= new ArrayList();
                  addList.add("10");

                  // compared the addList number versus the dataBaseList ContainerDetails object id, if both r
                  same then first i need to remove that id from dataBaseList and then add requestList to dataBaseList.
                  i am getting java.util.ConcurrentModificationException while doing addAll method.
                  whats wrong with this code?

                  if(addList != null && !addList.get(0).equals("") && addList.size() > 0)
                        {
                              for (Iterator iterator = addList.iterator(); iterator.hasNext();) {
                                    String addId = (String) iterator.next();
                                    
                                    for (Iterator iterator2 = dataBaseList.iterator(); iterator2
                                                .hasNext();) {
                                          ContainerDetails object = (ContainerDetails) iterator2.next();
                                    
                                          if(object.getId() == Integer.parseInt(addId))
                                          {
                                                iterator2.remove();
                                                dataBaseList.addAll(al);
            
                                          }

                              }
                           }
                        }
0
chaitu chaitu
Asked:
chaitu chaitu
  • 4
  • 4
  • 2
  • +2
1 Solution
 
Gibu GeorgeCTOCommented:
Are you using Threads in the application
0
 
chaitu chaituAuthor Commented:
no
0
 
Gibu GeorgeCTOCommented:
What type of application is this is it a web application?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
chaitu chaituAuthor Commented:
yes
0
 
CEHJCommented:
The first loop will only execute once, is that your intention?
0
 
CEHJCommented:
You can't addAll to dataBaseList while you're iterating it. Try instead:
        if(addList != null && !addList.get(0).equals("") && addList.size() > 0)
        {
            List temp = new ArrayList();
            for (Iterator iterator = addList.iterator(); iterator.hasNext();) {
                String addId = (String) iterator.next();
 
                for (Iterator iterator2 = dataBaseList.iterator(); iterator2
                        .hasNext();) {
                    ContainerDetails object = (ContainerDetails) iterator2.next();
 
                    if(object.getId() == Integer.parseInt(addId))
                    {   
                        iterator2.remove();
                        //dataBaseList.addAll(al);
                        temp.addAll(al);
 
                    }
 
                }   
            }   
            if (temp.size() > 0)
            {
                dataBaseList.addAll(temp);
            }
        }

Open in new window

0
 
objectsCommented:
why not use a Map (keyed on id), that way you would not even need to loop at all.
using the appropriate data structure can greatly simplify your code

0
 
avya2kCommented:
As per specifications, you can not modify contents while iterating a collection
Instead collect all contents in temparory list and add it to main list after iteration
0
 
chaitu chaituAuthor Commented:
objects,

can you give me some hint what you are trying to tell?
0
 
objectsCommented:
for example if you had a map keyed on id you would not need to loop through every element looking for a particular id.

0
 
CEHJCommented:
>>Instead collect all contents in temparory list and add it to main list after iteration

(which is what happens in the code i posted)

chaituu, what result do you get when you run that?
0
 
chaitu chaituAuthor Commented:
CEHJ,

ur solution is working.i thought i am doing some unwanted code thats why i am taking objects suggestion.
0
 
CEHJCommented:
:-)
0

Featured Post

Become an Android App Developer

Ready to kick start your career in 2018? Learn how to build an Android app in January’s Course of the Month and open the door to new opportunities.

  • 4
  • 4
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now