集合2

②Collection集合的迭代器对象:
  在根接口(无下标)中使用了一种公共的遍历方式:迭代器遍历(和下标无关)。
如图所示:

注意点:
  Iterator的对象就是迭代器对象(仓库管理员)!只关心有人来仓库取数据或者存数据,判断有的话取走,没有的话报错。
2. 一个集合的迭代器对象是集合自带的!
3. 对象.hasNext();—-判断有没有下一个元素
4. 对象.next();—-取出下一个元素
5. Iterator接口的实现类实现,3和4就是接口的其中两个常用方法。

具体实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
//创建一个集合对象(多态)
Collection<String> names=new ArrayList<String>();
//添加
names.add("郭德纲");
names.add("刘德华");
names.add("柳岩");
names.add("范伟");

//获取names集合的迭代器对象
Iterator<String> it=names.iterator(); //要和上面集合元素String类型一致
//标准代码(迭代器循环取值):
while(it.hasNext()) //判断有没有下一个元素-对象.hasNext();
{
String s=it.next(); //取出下一个元素-对象.next();
System.out.println(s);
}
}
}

代码结果:
郭德纲
刘德华
柳岩
范伟


三、Iterator接口:
  该接口规定了迭代集合所需要的方法:
  1. 对象.hasNext();—-判断有没有下一个元素
  2. 对象.next();—-取出下一个元素   


四、并发修改异常(ConcurrentModificationException)
  使用Iterator对象/增强for循环遍历集合出现“itcast”字符串 -> 向集合中增加一个“ITCAST(大写)”字符串

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
//定义一个集合
Collection<String> its=new ArrayList<String>();
its.add("alibaba");
its.add("tenxun");
its.add("itcast"); //出现了小写的“itcast”字符串
its.add("baidu");
its.add("sohu");
its.add("netease");

//迭代器遍历集合
//获取集合的迭代器对象
Iterator<String> it =its.iterator();

//循环遍历
while(it.hasNext())
{
String itname=it.next();
if("itcast".equals(itname)) //避免问题(常量在前面就不会有null的情况)
{
its.add("ITCAST"); //通过集合去添加
}
}

}
}

代码结果:
Exception in thread “main” java.util.ConcurrentModificationException(出现异常)
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Main.main(Main.java:21)

分析Concurrent(并发)Modification(修改)Exception(异常):
  JAVA规定,如果一个集合使用迭代器遍历,那么在遍历的过程中不允许修改集合的长度(add/clear/remove)。


五、增强for循环(底层为迭代器)

例如:

1
2
3
4
5
6
7
8
9
10
11
 //普通循环遍历数组
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}

//增强for循环遍历数组
for(i:a)
{
System.out.println(i);
}

  遍历集合还是在使用迭代器遍历,那么在遍历的过程中不允许修改集合的长度(add/clear/remove)。

1
2
3
4
5
6
7
8
9
10
11
12
13
  //增强for循环遍历集合
Collection<String> names=new ArrayList<String>(); //定义
names.add("abc");
names.add("jack");
names.add("rose");
names.add("tom");
//循环遍历
for(String name:names)
{
System.out.println(name);
}
}
}

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,