首页 > 遍历list的时候为什么不能修改呢?

遍历list的时候为什么不能修改呢?

求一个明确的解答,通俗易懂的哈


你的问题描述得不太准确,标签是javalisp,只写过一点 racket 代码就不谈论 lisp 了,以下默认修改为 list 的 add/remove 操作

PS:使用的JDK是java-8-openjdk-amd64


从java的角度回答这个问题, Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。
例如,如果没有使用Iterator,遍历一个数组的方法是使用索引:

  for(int i=0; i<array.size(); i++) { ... get(i) ... } 
public class TestCollections {  
  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<String>();  
        for (int i = 0; i < 10; i++) {  
            list.add("hello_" + i);  
        }  
        Iterator<String> iterator = list.iterator();  
        while (iterator.hasNext()) {  
            String str = iterator.next();  
            System.out.println(str);  
            if (str.equals("hello_5")) {  
//                iterator.remove();  
                list.remove(str);  
            }  
            str = "hehe";  
        }  
        System.out.println(list);  
    }  
}

可以修改呀,下面的程序会打印3个aaaaa

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("!");
for (int i = 0; i < list.size(); i++) {
    list.set(i, "aaaaa");
}
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

你是用什么方法遍历的,请贴出代码来,好帮你分析


具体语言实现不同,这里是一些语言无关的点

【热门文章】
【热门文章】