java.açıklama.ConcurrentModificationException
NOT: Iterator#remove()
yöntemi farkındayım.
Aşağıdaki kod örneği, List.remove
main
yöntemi ConcurrentModificationException
atar ama remove
yöntemi değil neden anlamıyorum.
public class RemoveListElementDemo {
private static final List<Integer> integerList;
static {
integerList = new ArrayList<Integer>();
integerList.add(1);
integerList.add(2);
integerList.add(3);
}
public static void remove(Integer remove) {
for(Integer integer : integerList) {
if(integer.equals(remove)) {
integerList.remove(integer);
}
}
}
public static void main(String... args) {
remove(Integer.valueOf(2));
Integer remove = Integer.valueOf(3);
for(Integer integer : integerList) {
if(integer.equals(remove)) {
integerList.remove(integer);
}
}
}
}
Açıklama için teşekkürler!
CEVAP
İşte bu yüzden: Böyle diyor Javadoc:
Bu yineleyicisi bu sınıf tarafından döndürülen yineleyici ve listİterator. eğer listede herhangi bir yapısal olarak değiştirilirse-hızlı başarısız yöntemleri: zaman yineleyici, herhangi bir şekilde dışında oluşturulduktan sonra yineleyici kendi Kaldır veya Ekle, yineleyici bir atar yöntemleri ConcurrentModificationException.
Bu onay yineleyici next()
yöntemi stacktrace görebileceğiniz gibi) yapılır. Ama her tarafından eğer sınır bir araya geldi olup olmadığını kontrol etmek için ne denir ki, eğer hasNext()
doğru teslim eğer sadece next()
yöntemi ulaşacağız,. Senin çıkarın yöntemi, hasNext()
denetler, ihtiyacı dönmek başka bir unsur olacaktır emin olmak için geri döndü iki öğe, şimdi ve sonra bir öğe kaldırıldı listesini sadece iki unsurları içerir. Yani her şey yolunda ve yineleme ile işimiz bitti. Eşzamanlı değişiklikler için onay bu asla denir next()
yöntemi farklı olduğu için oluşmaz.
Sonraki ikinci döngü. Biz hasNext metodu tekrar kontrol edecek ikinci numarası varsa Kaldır sonra geri dönebilirsiniz daha fazla değer. Zaten iki değer döndü, ama liste şimdi sadece içerir. Ama kodu burada:
public boolean hasNext() {
return cursor != size();
}
1 != 2, Şimdi birisi listesi kurcalıyordu olduğunu fark eder ve bu durum harekete next()
yöntemi, devam ediyoruz.
Sorunun düzelir umarım.
Hangi @NotNull açıklama Java kullanmal...
java.açıklama.XMLGregorianCalendar içi...
Dönüştürme 8601 uyumlu ISO java Dize.a...
java.açıklama.Vs java tarih.sql.Tarih...
Nasıl java dönüştürmek için.açıklama.t...