集合训话一般有三种:for循环、增强for循环和迭代器。这里主要讲一下for循环和迭代器方法。
1、增强 for循环:
注意:因为集合不同于数组,集合中元素类型不一定一致,所以需要定义Object类型的变量接收集合中的元素。
@Test public void Testfor() { Collection coll = new ArrayList(); coll.add(new Date()); coll.add("AA"); coll.add(123); coll.add("BB"); coll.add(new String("CC")); // 增强for循环 for (Object i : coll) { System.out.println(i); } }
2、迭代器:
注意:迭代器是集合循环中的常用方法。【开始迭代时,可以理解为‘指针’在首个元素上方,所以,首先hasNext()判断下一个元素是否存在,然后用next()输出。
hasNext():判断是否有下一个元素。
next():返回下一个元素。
@Test public void TestIterator() { Collection coll = new ArrayList(); coll.add(new Date()); coll.add("AA"); coll.add(123); coll.add("BB"); coll.add(new String("CC1")); // 迭代器 Iterator i = coll.iterator(); while (i.hasNext()) { System.out.println(i.next()); } }
3、错误写法:【这种写法时常规遇到的错误写法】
关于以下代码的解释:首先明白next()的作用,‘指针‘下移,返回下一个元素。【这里并不实际存在指针的概念,为了加强理解引入C语言中的指针,可以理解为元素下标】
在while中第一次判断next()是否为空时,实际上此次操作返回new Date()元素,同时 ‘指针‘ 从首个元素的最上方移动到new Date() .进入循环后的next()返回第二个元素 ‘AA‘,同时 ‘指针‘c从第一个元素移动到第二个元素。
在while中第二次判断next()是否为空时,实际上此次操作返回 123 元素,同时 ‘指针‘ 从第二个元素的最上方移动到 123 .进入循环后的next()返回第四个元素 ‘BB‘,同时 ‘指针‘c从第三个元素移动到第四个元素。
后续元素以此类推。
输出结果:
AA
BB
抛出异常:
java.util.NoSuchElementException
总结:1、while条件中的判断并不起到实际作用保证输出有元素。因为判断和输出的不是一个元素。所以导致编译正常,但是实际输出时间隔式的输出。
2、会出现while判断中的元素时最后一个元素,循环中的输出为为空,抛出异常:java.util.NoSuchElementException。
@Test public void TestNext() { Collection coll = new ArrayList(); coll.add(new Date()); coll.add("AA"); coll.add(123); coll.add("BB"); coll.add(new String("CC2")); // 错误写法 Iterator i = coll.iterator(); while (null != i.next()) { System.out.println(i.next()); } }
原文:https://www.cnblogs.com/honny-seven/p/11332249.html