Every time I try to call ArrayList.remove() on an element while in a for each loop, Java throws a ConcurrentModificationException. I need to remove an element in a for loop because in there is where I look through the objects to find objects which meet the criteria for removal.
Maybe using a lower level form of iteration will solve the problem? Removing elements from a list or array or whatever while iterating over it can be tricky depending on the underlying representation, so maybe Java doesn't know how to do it and you just need to get more specific so you can do it correctly yourself?
Note that this exception does not always indicate that an object has been concurrently modified by a different thread. If a single thread issues a sequence of method invocations that violates the contract of an object, the object may throw this exception. For example, if a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will thow this exception.
It is common for Iterators in Java to be invalid if the underlying data structure is changed. Since it is an arraylist you can use a regular for-loop and get/remove. Just remember to decrement the index after removing an element.
Name:
Anonymous2012-01-18 9:03
>>7
This has nothing to do with thread-safe problems. This is due to a moron who doesn't understand what the sugar syntactic interator for loop :
for(Renderable renderable:renderables){
>>1
Fuck off back to your AbstractCubicleFactoryFactory, ``faggot"
Name:
Anonymous2012-01-18 11:33
>>13
Go back to your own country you foreign piece of shit.
Name:
Anonymous2012-01-18 11:34
>>13 >>14
Actually I'm not a Java programmer, just an embedded systems designer who makes more than you ever will. The only reason I'm using java is because my friend asked me to help him write a game engine for android. I don't even code as a profession anymore, I design... I leave the coding to the slaves and only code when they fuck up big time.
>>13 is a toilet scrubber. Seriously. Based on some of his past posts, this idiot isn't capable of making a correct statement about programming. On top of that, his written communication skills suck.
Name:
Anonymous2012-01-18 11:52
>>16 >>18
both of you are morons who can't code properly. Go back to your fantasy lives where you dream that you're as successful as kodak master programmer.
Name:
Anonymous2012-01-18 11:57
>>19
Again, you're more than welcome to waddle over to ste #300 on 64rd and Hollis and tell me that.
Name:
Anonymous2012-01-18 11:59
>>19
Also you idiot, in case you haven't noticed, I have a different writing style than >>16. Again, you're stupid. And again, you have no possible future as a comoputer programmer.
>>20
If you has any good reading comphension you would notice that I stated that they are jealous of your enterprise java job and wish they were like you.
Please do not make my make my Kodak-san look like a moron.
Name:
Anonymous2012-01-18 13:35
Kodak is now a meme
Name:
Anonymous2012-01-18 13:40
>>1
you cannot remove elements of an array during a for each
use a manual while loop and SAVE where you are because removing an element during traversal fucks things up
Instead consider a proper Iterator or a basic for loop.
/* THE LOGICAL WAY */
Object o;
int i;
for(i=0;i<anus.size();++i){
/* BULLSHIT */
if(I_SHOULD_REMOVE_THIS_INDEX){
o = anus.remove(i);
--i;
/* BULLSHIT WITH O */
}
/* BULLSHIT */
}
>>31,33 http://www.docjar.com/html/api/java/util/ArrayList.java.html
Since Java arrays are fixed-size, they would eventually need to have a new array created and the objects copied into the new array using System.arraycopy. Internally, a Java ArrayList isn't much different than a C++ std::vector or a C array expanded using realloc (except for the bloated unneeded error handling).
>>36
An array and an ArrayList are two different things in Java. Also, an array in C *cannot* be expanded using realloc(). Holy cripes, please shut up and read a book.
ENTERPRISE COMMENTING BY JOHN BLOCH AND NEAL FAGTER
93 * @author Josh Bloch
94 * @author Neal Gafter
884 /**
885 * Returns a view of the portion of this list between the specified
886 * {@code fromIndex}, inclusive, and {@code toIndex}, exclusive. (If
887 * {@code fromIndex} and {@code toIndex} are equal, the returned list is
888 * empty.) The returned list is backed by this list, so non-structural
889 * changes in the returned list are reflected in this list, and vice-versa.
890 * The returned list supports all of the optional list operations.
891 *
892 * <p>This method eliminates the need for explicit range operations (of
893 * the sort that commonly exist for arrays). Any operation that expects
894 * a list can be used as a range operation by passing a subList view
895 * instead of a whole list. For example, the following idiom
896 * removes a range of elements from a list:
897 * <pre>
898 * list.subList(from, to).clear();
899 * </pre>
900 * Similar idioms may be constructed for {@link #indexOf(Object)} and
901 * {@link #lastIndexOf(Object)}, and all of the algorithms in the
902 * {@link Collections} class can be applied to a subList.
903 *
904 * <p>The semantics of the list returned by this method become undefined if
905 * the backing list (i.e., this list) is <i>structurally modified</i> in
906 * any way other than via the returned list. (Structural modifications are
907 * those that change the size of this list, or otherwise perturb it in such
908 * a fashion that iterations in progress may yield incorrect results.)
909 *
910 * @throws IndexOutOfBoundsException {@inheritDoc}
911 * @throws IllegalArgumentException {@inheritDoc}
912 */
913 public List<E> subList(int fromIndex, int toIndex) {
914 subListRangeCheck(fromIndex, toIndex, size);
915 return new SubList(this, 0, fromIndex, toIndex);
916 }
>>37 Also, an array in C *cannot* be expanded using realloc(). Holy cripes, please shut up and read a book.
I think you took his statement more literal then it was meant to be taken. You have a bad day at work like you seem to always do? Enterprise java getting you your head after all these years ?
There's another thing, you need to realize there's more than 2 people on this board ( you and me ). I'm not the one that originally wrote that post but i at least clearly understand what he was getting. Please do not accuse me of such horrible travesties.
Now, lets talk about your anger issues you appear to be having. Take the next 10 minutes to write down a list of all the things that anger you in the world and post it to share with the group. We're here to help you.
Name:
Anonymous2012-01-18 20:28
>>48
1)Ex girlfriends who posts pictures of me "being her bitch" on myspace.
2)The neighbors dog. I swear if I hear that thing bark one more time at 3am, I'm gonna throw an m80 over the fence, and then call 911 to report that I heard a gunshot next door.
>>53
I guess it would have been smarter of me to actually look at his job title for all those jobs
Name:
Anonymous2012-01-18 20:54
>>51
Now all we have to do is contact him and see if he remembers any man that would ramble on about mental midget toilet scrubbers and we'll find out who you truly are.
error checking is bloat when errors should never happen, and errors should never happen, but sometimes they do, and if there is checking, then you are less fucked than if errors were checked, but you are stilled fucked, but the fucking up only prevents the functioning of your program, rather than causing it to do something completely arbitrary, or intentional from a hacker who has learned how to exploit the error, so sometimes it is worth it to have the error checking, but if the application is proved correct and if speed is needed, then error checking can get in teh way of getting adequate speed.