SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • Videogamerz | Call of Duty

    Videogamerz

    5 NİSAN 2012
  • XxMinayaxX1

    XxMinayaxX1

    9 Mayıs 2012