码迷,mamicode.com
首页 > 编程语言 > 详细

Java集合Set、List、Map的遍历方法

时间:2015-06-17 21:21:11      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

本文实例讲述了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异常。

Java集合Set、List、Map的遍历方法

标签:

原文地址:http://www.cnblogs.com/GiantPanda-Fang/p/4584219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!