简体   繁体   English

使用迭代器从ArrayList添加,删除和打印

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

First of all I want t say that I am aware of other easier and better loops for this kind of work, but I just want to practise a little with Iterator. 首先,我不想说我知道这种工作还有其他更简单,更好的循环,但是我只想对Iterator进行一些练习。 So, I am looping through an ArrayList and I want to add and remove elements in it with iterator but when I run the program I get no output on screen. 因此,我正在遍历ArrayList,并希望使用迭代器在其中添加和删除元素,但是当我运行该程序时,屏幕上没有任何输出。 This is what I have: 这就是我所拥有的:

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) {
        }
    }
}

And in main: 而在主要方面:

Thread t1 = new Thread(new IteratorRun());
t1.start();
  1. Check it.hasNext() in addOrder. 在addOrder中检查it.hasNext()。 First time array list is empty and hence it.hasNext will be false. 第一次数组列表为空,因此它。hasNext将为false。
  2. If we try to add value to araylist while using iterator it will throw java.util.ConcurrentModificationException 如果我们尝试在使用迭代器时将值添加到araylist中,它将抛出java.util.ConcurrentModificationException

In most of the places similar code is present addOrder/deleteOrder this will cause this exception. 在大多数地方,存在类似的代码addOrder / deleteOrder,这将导致此异常。

example : Following code will be throwing ConcurrentModificationException. 示例:以下代码将引发ConcurrentModificationException。

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

I have updated the Orders code 我已经更新了订单代码

  1. You need to re-initiate the iterator from list, as list get be modified 您需要从列表中重新启动迭代器,因为列表会被修改
  2. logic for checking whether value already present in the list is modified. 检查列表中已经存在的值是否被修改的逻辑。


    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