2016-04-10 26 views
1

Bu mümkün olup olmadığını merak ediyordum, ve eğer, nasıl yapabilirim? Temel olarak ne gördüm ve düşünmek sorun fonksiyonu kullanıyorum zaman iterator imleci hareket etmektir (Bu sorunu varsa ben bilmiyorum mükemmel bir şekilde anlayamıyorum). Sorun bir öğe kaldırmak ve sonra eklemek iki tane daha (sorun bulduğum özel durum). Sırasında listesinde değişiklikÜzerinde yineleme ve yeni elemanların üzerinde yineleme sırasında liste değiştirme

List<String> list =new ArrayList<>(); 
for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext();) 
     //here i am adding and removing elements 
+0

Bu Java mı? İnsanlara hangi dili kullandığınızı söylerseniz yardımcı olur. Onlar farklı. –

+0

Her neyse, cevap hayır yapamazsınız, ve buna gerek yok. Bir kopya üzerinde yineleyin. Bunu Java'da nasıl yaptığınıza dair hiçbir ipucu yok, ama eminim ki burada bir düzine örnek bulacaksınız. –

+0

Maalesef, java olduğunu yazmayı unuttum, yine de cevabınız için teşekkürler, ancak bunu yapamam çünkü öğeleri eklemenin koşulları daha önce eklediğim öğelere bağlıdır. – user18497

cevap

0

ListIterator

programcı her iki yönde listesini hareket sağlar listeler için adımlayıcısı JLS
göre:

Benim kod aşağıdaki gibi bir şeydir yineleme yapın ve listedeki yineleyicinin geçerli konumunu edinin. Bir ListIterator'ın geçerli öğesi yoktur; imleç konumu her zaman 'un bir önceki() çağrısıyla döndürüleceği öğenin arasında yer alır ve öğesinin bir sonraki() çağrısıyla döndürülmesi gereken öğe.

enter image description here

kaldırabilir, eklenti()() kullanabilirsiniz: aşağıdaki düzeltme imi (^) ile gösterildiği gibi, n uzunluğunda bir listesi için bir iterasyon, n + 1 mümkün olan imleç konumu vardır Yineleyici ve aynı modifikasyon yapmak için yöntem, liste referansına yansıtılacaktır.

JLS

göre


çıkarın aşağıdaki() veya önceki() (isteğe bağlı işlemi) tarafından döndürülen son eleman listeden kaldırır. Bu çağrı sadece bir kez veya bir sonraki numaralı telefon görüşmesi için yapılabilir. Ekleme, (E) bir sonraki veya bir önceki son çağrıdan sonra çağrılan olmadığında yapılabilir.

Yani bu fırlatır) ((bir sonraki) veya önceki uğramadan iki kez kaldırmak kullanırsanız java.lang.IllegalStateException
Ben

public static void main(String[] args) { 

    List<String> list =new ArrayList<>(); 
    list.add("55"); 
    list.add("155"); 
    list.add("255"); 
    for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext();){ 

     System.out.println(list.size()); 
     iterator.add("88"); 
     System.out.println(list.size()); 
     iterator.next(); 
     System.out.println(list.size()); 
     iterator.remove(); 
     System.out.println("first remove done"); 
     iterator.remove(); // will throw exception if previous or next is not called 
    } 

    System.out.println(list); 
} 
) ((ekleyin) ve kaldırmak sınamak için kodunuzu modifiye
İlgili konular