10 Temmuz 2009, Cuma
Bir HashSet süre gelen Öğeleri Yineleme
Eğer bir Java öğeleri kaldırmak için çalışırsanızHashSetyineleme olsa da, bir benConcurrentModificationException. Ne öğeleri kümesini kaldırmak için en iyi yoldurHashSetaşağıdaki örnekte olduğu gibi?
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i )
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Burada bir çözümdür, ama çok zarif sanmıyorum:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i )
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Teşekkürler!
CEVAP
10 Temmuz 2009, Cuma
El ile ayarlama öğeleri üzerinde yineleme yapabilirsiniz:
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
if (element % 2 == 0) {
iterator.remove();
}
}
Genellikle bu desen while
bir döngü yerine: for
bir döngü kullanarak göreceksiniz
for (Iterator<Integer> i = set.iterator(); i.hasNext();) {
Integer element = i.next();
if (element % 2 == 0) {
i.remove();
}
}
İnsanlar belirttiği gibi, for
bir döngü kullanarak yineleyici değişken (bu durumdai
) daha küçük bir kapsam ile sınırlı tutar için tercih edilir.
Bunu Paylaş:
Bir std öğeleri kaldırın::bu yineleme ...
Nasıl yapılır: bir IEnumerable<T>...
Nasıl üzerinde yineleme sırasında bir ...
Python yineleme sırasında bir listeden...
STL silme öğeleri yineleme sırasında s...