使用多种方式实现遍历HashMap的方法

今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中若是想让一个集合可以用for加强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable到底是如何来实现迭代的,在这里将不作讲解,下面主要讲解一下遍历过程。java

1 //定义一个泛型集合
2 Map<String, String> map = new HashMap<String, String>();
3 //经过Map的put方法向集合中添加数据
4     map.put("001", "刘备");
5     map.put("002", "曹操");
6     map.put("003", "孙权");

方式一:使用该Map接口的KeySet方法来实现数组

问题:咱们都知道Map接口并无实现Iterable接口,为何能用他的KetSet方法就能实现迭代呢?测试

解析:由于KeySet方法返回此映射中包含的键的 Set 视图,这个方法居然能返回一个Set试图,也就说他的返回值类型是一个Set接口,咱们能够经过API文档看到Set接口他是实现了Iterable接口,因此能实现迭代。spa

1 //调用KeySet方法放回一个Set接口类型
2     Set<String> set = map.keySet();
3     //使用for加强来取出key和value
4     for (String item : set) {
5       System.out.println("Key是:" + item + ";Value值是:" + map.get(item));
6     }

方式三:使用Map接口的entrySet方法实现(for加强)设计

entrySet:entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry,Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。code

1 Set<Entry<String, String>> setentry = map.entrySet();
2     for (Entry<String, String> item : setentry) {
3       System.out.println("Key是:" + item.getKey() + ";Value值是:"
4           + item.getValue());
5     }

java中迭代器Iterator接口是用来对集合中的对象进行遍历或者移除操做的,大多数是遍历操做的

下面介绍迭代器的使用:对象

ArrayList list=new ArrayList();
  list.add("A");
  list.add("B");
  list.add("H");
  list.add("E");
  list.add("J");
  
  
  Iterator ite=list.iterator();
  while(ite.hasNext()){
   System.out.println(ite.next());
  }

方式四:使用Map接口的keySet().Iterable()(while循环)blog

Iterable():返回在此 set 中的元素上进行迭代的迭代器。返回的元素没有特定的顺序(除非此 set 是某个提供顺序保证的类的实例)。返回值类型Iterator<E接口

1 Iterator<String> it = map.keySet().iterator();//若是仍有元素能够迭代,则返回 true。   
2  while (it.hasNext()) {     //获取Key值
3    String key = it.next();   
4 System.out.println("Key是:" + key + ";Value值是:" + map.get(key));
5    }

方式五:使用Map接口的value.Iterable()(while循环)rem

1 Iterator<String> it1 = map.values().iterator();
2     while (it1.hasNext()) {
3       String value = it1.next();
4       System.out.println("Value值是:" + value);
5     }

方式六:使用Map接口的entrySet().Iterable()(while循环)

 
1 Iterator<Entry<String, String>> it2 = map.entrySet().iterator();
2     while (it2.hasNext()) {
3       Entry<String,String> entry=it2.next();
4       System.out.println("Key是:" + entry.getKey() + ";Value值是:" + entry.getValue());
5     }

加强for循环:

 

设计的本意:抛弃迭代器
加强for循环只能遍历数组和实现了Iteratable接口的对象。
语法:
    for(元素的类型 变量名:数组或实现了Iteratable接口的对象){
    System.out.println(变量名);

    }

加强for循环的特色:只适合取数据。要想在遍历时改元素的值,请使用传统for循环。

 列子1:

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
 
public class MapDemo {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "花花");
        map.put(2, "草草");
        map.put(3, "叶叶");
        map.put(4, "瓶瓶");
        map.put(4, "新瓶瓶");
        System.out.println(map);
        Set<Integer> keySet = map.keySet();
        // 测试keyset是不是会跟随map的变化而变化
        // 结果:是
        map.put(5, "点点");
        map.remove(2);
        Iterator<Integer> keys = keySet.iterator();
        while (keys.hasNext()) {
            System.out.println(map.get(keys.next()));
        }
        Set<Entry<Integer, String>> entries = map.entrySet();
        for (Entry<Integer, String> entry : entries) {
            System.out.println(entry);
        }
        // 获取value
        Collection<String> collection = map.values();
        System.out.println(collection);
        // 使用for-each输出value值
        for (String string : collection) {
            System.out.println(string);
        }
        System.out.println("使用迭代器遍历:");
        // for语句的使用for(表达式1;表达式2;表达式3){ 内容4 }
        for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
            String string = (String) iterator.next();
            System.out.println(string);
        }
        String[] name = { "tym", "cww", "tym", "flj", "tym", "flj" };
        Map<String, Integer> map2 = new HashMap<String, Integer>();
        // 在添加过程当中,把value设置为出现的次数
        for (int i = 0; i < name.length; i++) {
            if (!map2.containsKey(name[i])) {
                map2.put(name[i], 1);
            } else {
                map2.put(name[i], map2.get(name[i]) + 1);
            }
        }
        System.out.println(map2);
    }
}

列子2:

 1 //加强for循环
 2 public class Demo {
 3     //传统方式遍历Map
 4     @Test
 5     public void test3(){
 6         Map map = new LinkedHashMap();
 7         map.put("a", "aaa");
 8         map.put("b", "bbb");
 9         map.put("c", "ccc");
10         
11         Set keys = map.keySet();
12         Iterator it = keys.iterator();
13         while(it.hasNext()){
14             String key = (String)it.next();
15             String value = (String) map.get(key);
16             System.out.println(key+"="+value);
17         }
18     }
19     
20     @Test//加强for遍历map方式一
21     public void test31(){
22         Map map = new LinkedHashMap();
23         map.put("a", "aaa");
24         map.put("b", "bbb");
25         map.put("c", "ccc");
26         
27         Set keys = map.keySet();
28         for(Object obj:keys){
29             String key = (String)obj;
30             String value = (String) map.get(key);
31             System.out.println(key+"="+value);
32         }
33         
34     }
35     //传统方式遍历Map
36     @Test
37     public void test4(){
38         Map map = new LinkedHashMap();
39         map.put("a", "aaa");
40         map.put("b", "bbb");
41         map.put("c", "ccc");
42         
43         Set me = map.entrySet();
44         Iterator it = me.iterator();
45         while(it.hasNext()){
46             Map.Entry m = (Map.Entry)it.next();
47             String key = (String) m.getKey();
48             String value = (String)m.getValue();
49             System.out.println(key+"="+value);
50         }
51         
52     }
53     @Test//加强for循环遍历map方式二
54     public void test41(){
55         Map map = new LinkedHashMap();
56         map.put("a", "aaa");
57         map.put("b", "bbb");
58         map.put("c", "ccc");
59         
60         for(Object obj:map.entrySet()){
61             Map.Entry me = (Map.Entry )obj;
62             String key = (String) me.getKey();
63             String value = (String)me.getValue();
64             System.out.println(key+"="+value);
65         }
66         
67     }
68 }
相关文章
相关标签/搜索