簡體   English   中英

使用迭代器從ArrayList添加,刪除和打印

[英]Adding, removing and printing from ArrayList with Iterator

首先,我不想說我知道這種工作還有其他更簡單,更好的循環,但是我只想對Iterator進行一些練習。 因此,我正在遍歷ArrayList,並希望使用迭代器在其中添加和刪除元素,但是當我運行該程序時,屏幕上沒有任何輸出。 這就是我所擁有的:

public class Orders { 
    ArrayList<String> list = new ArrayList<>();
    Iterator it = list.iterator();

    public void addOrder(String s) {
        while(it.hasNext()){
            String st = (String) it.next();
            if(s.equals(st)){
                System.out.println("The order '"+s+"' already exists.");
            }
            else{
                list.add(s);
                System.out.println("Order '"+s+"' was added.");
            }
        }

    }

    public void deleteOrder(String s) {
        while(it.hasNext()){
            String st = (String) it.next();
            if(s.equals(st)){
                list.remove(s);
                System.out.println("The order '"+s+"' was deleted succesfully.");
            }
            else{
                System.out.println("The order '"+s+"' was not found.");
            }
        }
    }

    public void showList(){
        while(it.hasNext()){
            String st = (String) it.next();
            System.out.println("Order: '"+st+"'. \n");
        }
    }
}



public class RemoveOrder {

  private Orders ord;
  public RemoveOrder( Orders o ) {
    ord = o;
  }
  public void remove() {  
      ord.deleteOrder( "jk123" );
      ord.deleteOrder( "jk125" );
      ord.showList();
  }
}


public class AddOrder {

    private Orders ord;

    public AddOrder( Orders o ) {
        ord = o;
    }

    public void add() {
        ord.addOrder( "jk123" );
        ord.addOrder( "jk124" );
        ord.addOrder( "jk125" );
        ord.addOrder( "jk126" );
        ord.showList();
    }
}


public class IteratorRun implements Runnable {


    Orders ord = new Orders();
    AddOrder ao = new AddOrder(ord);
    RemoveOrder ro = new RemoveOrder(ord);

    public void run() {
        try {
            ao.add();
            ro.remove();
        } catch (Exception e) {
        }
    }
}

而在主要方面:

Thread t1 = new Thread(new IteratorRun());
t1.start();
  1. 在addOrder中檢查it.hasNext()。 第一次數組列表為空,因此它。hasNext將為false。
  2. 如果我們嘗試在使用迭代器時將值添加到araylist中,它將拋出java.util.ConcurrentModificationException

在大多數地方,存在類似的代碼addOrder / deleteOrder,這將導致此異常。

示例:以下代碼將引發ConcurrentModificationException。

  ArrayList al = new ArrayList(); al.add("test"); Iterator iter = al.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); al.add("test"); } 

我已經更新了訂單代碼

  1. 您需要從列表中重新啟動迭代器,因為列表會被修改
  2. 檢查列表中已經存在的值是否被修改的邏輯。


    import java.util.ArrayList;
    import java.util.Iterator;

    public class Orders { 
        ArrayList list = new ArrayList();
        Iterator it = null;

        public void addOrder(String s) {
            it = list.iterator();
            while(it.hasNext()){
                String st = (String) it.next();
                if(s.equals(st)){
                    System.out.println("The order '"+s+"' already exists.");
                    return;
                }

            }


                list.add(s);
                System.out.println("Order '"+s+"' was added.");    


        }

        public void deleteOrder(String s) {
            it = list.iterator();
            while(it.hasNext()){
                String st = (String) it.next();
                if(s.equals(st)){
                    list.remove(s);
                    System.out.println("The order '"+s+"' was deleted succesfully.");
                    return ;
                }

            }
                System.out.println("The order '"+s+"' was not found.");

        }

        public void showList(){
            it = list.iterator();
            while(it.hasNext()){
                String st = (String) it.next();
                System.out.println("Order: '"+st+"'. \n");
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM