欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 集合学习之——Java 的Iterable接口的使用

程序员文章站 2022-04-15 22:18:18
...

参考:https://www.cnblogs.com/LittleHann/p/3690187.html

虽然知道Iterable接口可以用来遍历集合类中的内容,但是具体操作时还是遇到下面的问题了,

 

你知道Iterable默认指针指的的第一个对象还是,指针变量呢?看完下面这个你或许就知道了

第一个例子代码:

package ids.autoview.tw.acconsys.test;

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

public class IteratorTest {
    public static void main(String[] args){
        List<String> l = new ArrayList<>();
        for (int i=0;i<10;i++){
            l.add(Integer.toString(i));
        }

        Iterator<String> i = l.iterator();

        if(i.hasNext()){
                i.remove();
        }

        for (String s :
                l) {
            System.out.println(s);
        }
    }

}

运行后报如下错误

ids.autoview.tw.acconsys.test.IteratorTest
Exception in thread "main" java.lang.IllegalStateException
	at java.util.ArrayList$Itr.remove(ArrayList.java:864)
	at ids.autoview.tw.acconsys.test.IteratorTest.main(IteratorTest.java:17)

Process finished with exit code 1

 

 

第二个例子代码:

package ids.autoview.tw.acconsys.test;

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

public class IteratorTest {
    public static void main(String[] args){
        List<String> l = new ArrayList<>();
        for (int i=0;i<10;i++){
            l.add(Integer.toString(i));
        }

        Iterator<String> i = l.iterator();
        i.next();
        if(i.hasNext()){
                i.remove();
        }

        for (String s :
                l) {
            System.out.println(s);
        }
    }

}

运行结果:

1
2
3
4
5
6
7
8
9

Process finished with exit code 0

 

 

第一个例子和第二个例子最大的区别是,第二个例子在执行Iterator的remove方法之前,先执行了next的操作,next之前,指针指的是变量i本身,next之后才指的是第一个内容。

Java 集合学习之——Java 的Iterable接口的使用

相关标签: java Iterator