标签:
本文实例讲述了Java集合Set、List、Map的遍历方法,分享给大家供大家参考。
具体方法如下:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
package com.shellway.javase; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import org.junit.Test; public class TestCollection { public static void print(Collection<? extends Object> c){ Iterator<? extends Object> it = c.iterator(); while (it.hasNext()) { Object object = (Object) it.next(); System.out.println(object); } } @Test public void demo1(){ Set<String> set = new HashSet<String>(); set.add( "AAA" ); set.add( "BBB" ); set.add( "CCC" ); print(set); //Set的第一种遍历方式:利用Iterator Iterator<String> it1 = set.iterator(); for (String ss : set) { System.out.println(ss); } //Set的第一种遍历方式:利用foreach for (String sss : set) { System.out.println(sss); } List<String> list = new ArrayList<String>(); list.add( "DDDDD" ); list.add( "EEEEE" ); list.add( "FFFFF" ); print(list); //List的第一种遍历方式:因为list有顺序,利用size()和get()方法获取 for ( int i = 0 ; i < list.size(); i++) { System.out.println(list.get(i)); } //List的第二种遍历方式:利用Iterator Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } //List的第三种遍历方式:利用foreach for (String s2 : list) { System.out.println(s2); } Map<String,String> map = new TreeMap<String, String>(); map.put( "Jerry" , "10000" ); map.put( "shellway" , "20000" ); map.put( "Kizi" , "30000" ); print(map.entrySet()); //Map的第一种遍历方式:先获得key,再获得值value Set<String> sett = map.keySet(); for (String s : sett) { System.out.println(s+ ":" +map.get(s)); } //Map的第二种遍历方式:获得键值对 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey()+ " : " +entry.getValue()); } } } |
这里使用泛型
for循环遍历和iterator遍历的区别
1.手先增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的,但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
以下例子证明第一点
① public static void removeEvensVer2(List<Integer> lst)
{
for (Integer x : lst)
if (x % 2 == 0)
lst.remove(x);
System.out.println(lst);
}
② public static void removeEvensVer3(List<Integer> lst)
{
Iterator<Integer> itr = lst.iterator();
while (itr.hasNext())
if (itr.next() % 2 == 0)
itr.remove();
System.out.println(lst);
}
①在运行时抛出异常,②正常
原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出ConcurrentModificationException异常。
标签:
原文地址:http://www.cnblogs.com/GiantPanda-Fang/p/4584219.html