Java

No.5 Map集合

2016-04-10  本文已影响54人  醒着的码者

简介:

常用方法:

关于Entry的理解;

相信大家在刚接触java的时候肯定对Map集合中Set<Map.Entry<K,V>> entrySet()方法很难理解,这里我说下我的理解,欢迎大家指正:
(1)首先我们理解什么是内部类,内部类简单来说就是定义在一个类中的类,内部类的特点是就是能够访问外部类的任何属性和方法;内部类的调用方法是"外部类.内部类";
(2)这里正是应用了这个方法:在Map接口内部定义了一个子接口,该字接口也可以理解为是Map类型的,这个子接口内部提供了获取Map集合中的key和value的方法;
(3)通过调用entrySet方法获取一个Set集合,该集合中存放的元素为Map.Entry类型的元素。
(4)API对这个内部接口定义大概意思是,他存储了与对应的Map集合相同的元素映射。也就是说同过entrySet方法得到的是将Map集合元素以Map.Entry类型存放在了一个set集合中。
(5)遍历Map.Entry我们只能通过高级for循环来遍历了。

Map集合的两种遍历方法;

public class MapDemo {

public static void main(String[] args) {
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "a");
    map.put(2, "b");
    map.put(3, "c");
    //遍历方式1:keySet
    Set<Integer> key_Set = map.keySet();
    for(Iterator<Integer> it = key_Set.iterator();it.hasNext();){
        int key = it.next();
        System.out.println("key :" + key +"; "+  "value : " + map.get(key));
    }
    //遍历方式2:entrySet
    Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
    for(Map.Entry<Integer, String> temp : entrySet){
        System.out.println("key :" + temp.getKey() +"; "+  "value : " + temp.getValue());
    }
}
}

注意Map集合没有迭代器方法,所以有了两个方法keySet()/entrySet();各返回一个Set集合,在通过遍历Set集合的方法来遍历Map中的内容;

方法1中:先通过将Map中的key存放在Set中,在遍历Set中的key的同时在调用Map的get方法获取值,这个方法略显得有点效率低下;
方法2中:先通过将Map中的Entry放在Set中,在通过遍历Set中的Map.Entry对象来获取Map中的键和值。这个方法是被推荐是使用的;但是这里有个误区千万不能在第二方法的时候同过迭代器来迭代Set集合!原因是获取it.next()值要不获取值要不获取键。如果一个循环内调用两次next获取键和值,那么就会产生错误;

上一篇 下一篇

猜你喜欢

热点阅读