HashMap遍历(keyset()、entrySet()、values())

在Map集合中

values():

方法是获取集合中的所有的值----没有键,没有对应关系,

KeySet():

将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 

entrySet():

Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。

 

一、values():

 1 Map<String,String> map = new HashMap<String,String>();
 2 
 3  map.put("01", "zhangsan");
 4 
 5  map.put("02", "lisi");
 6 
 7  map.put("03", "wangwu");
 8 
 9  
10 
11 
12  Collection<String> collection = map.values();//返回值是个值的Collection集合
13 
14  System.out.println(collection);
15 
16  //打印结果:
17 
18  //[zhangsan, lisi, wangwu]
19  //Set<K> keySet() //返回值是个只存放key值的Set集合(集合中无序存放的)
20  //Set<Map.Entry<K,V>> entrySet() //返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。

二、KeySet():

 1 Map<String,String> map = new HashMap<String,String>();
 2 
 3          map.put("01", "zhangsan");
 4 
 5          map.put("02", "lisi");
 6 
 7          map.put("03", "wangwu");
 8 
 9                  
10  Set<String> keySet = map.keySet();//先获取map集合的所有键的Set集合
11 
12          Iterator<String> it = keySet.iterator();//有了Set集合,就可以获取其迭代器。
13 
14          while(it.hasNext()){
15 
16                  String key = it.next();
17 
18                  String value = map.get(key);//有了键可以通过map集合的get方法获取其对应的值。
19 
20                          
21 
22                  System.out.println("key: "+key+"-->value: "+value);//获得key和value值
23 
24                  }

三、entrySet():

 1 Map<String,String> map = new HashMap<String,String>();
 2 
 3                  
 4 
 5  map.put("01", "zhangsan");
 6 
 7  map.put("02", "lisi");
 8 
 9  map.put("03", "wangwu");
10 
11 
12  //通过entrySet()方法将map集合中的映射关系取出(这个关系就是Map.Entry类型)
13 
14  Set<Map.Entry<String, String>> entrySet = map.entrySet();
15 
16  //将关系集合entrySet进行迭代,存放到迭代器中                
17 
18  Iterator<Map.Entry<String, String>> it2 = entrySet.iterator();
19 
20                  
21 
22  while(it2.hasNext()){
23 
24          Map.Entry<String, String> me = it2.next();//获取Map.Entry关系对象me
25 
26          String key2 = me.getKey();//通过关系对象获取key
27 
28          String value2 = me.getValue();//通过关系对象获取value
29 
30                          
31 
32          System.out.println("key: "+key2+"-->value: "+value2);
33 
34  }

// 注意:

//it2.hasNext()
//判断it2是否有值
//迭代游标最开始是指向第一个元素的前面,比如-1
//所以第一次it.next()的时候是返回第一个元素的(第一个元素前面的next,就是第一个元素了)
//当执行了it.next()方法后,游标向后移动一位,即指向了第一位元素,在执行it.next()的时候,返回第二个元素。以此类推

 

 


说白了在api文档中这三个方法返回的都是视图

public class MapFunction {
 
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("01", "a");
        map.put("02", "b");
        map.put("03", "c");
        map.put("04", "d");
        
        /**通过values()方法,获取集合中所有的值**/
        Collection<String> collection = map.values();
        System.out.println(collection);
        
        /**通过keySet()方法将所有的key值存放到Set集合中,Set集合中有迭代器**/
        Iterator<String> iterator = map.keySet().iterator();
        while(iterator.hasNext()){
            String key = iterator.next();
            System.out.println("key="+key+"  "+map.get(key));
        }
        
        /**通过entrySet()方法将key和value存放到Set集合中,Set集合中有迭代器**/
        Set<Entry<String,String>> entry = map.entrySet();
        Iterator<Entry<String,String>> iterators = entry.iterator();
        while(iterators.hasNext()){
            Entry<String,String> entrys  = iterators.next();
            System.out.println("key="+entrys.getKey()+"&&value="+entrys.getValue());
        }
    }
 
}
keySet():迭代后只能通过get()取key 
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口
说明:keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好
posted @ 2021-06-08 11:02  这里那里  阅读(76)  评论(0)    收藏  举报
Live2D