欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

JDK8中引入了m 劳务派遣信息管理系统 ap.foreach来进行遍历

点击: 次  来源:宝鼎软件 时间:2017-08-15

原文出处: Hosee

关于HashMap的实现这里就不展开了,详细可以参考JDK7与JDK8中HashMap的实现

JDK8之前,可以利用keySet可能entrySet来遍历HashMap,JDK8中引入了map.foreach来举办遍历。

原因:

keySet其实是遍历了2次,一次是转为Iterator工具,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,劳务派遣管理系统,效率更高。假如是JDK8,利用Map.foreach要领。

1. keySet和entrySet

1.1 根基用法

keySet:

Map map=new HashMap();
Iterator it=map.keySet().iterator();
Object key;
Object value;
while(it.hasNext()){
key=it.next();
value=map.get(key);
System.out.println(key+":"+value);
}

entrySet:

Map map=new HashMap();
Iterator it=map.entrySet().iterator();
Object key;
Object value;
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
key=entry.getKey();
value=entry.getValue();
System.out.println(key+"="+value);
}

源码上看:

keySet:

final class KeyIterator extends HashIterator
        implements Iterator<K> {
        public final K next() { return nextNode().key; }
    }

entrySet:

final class EntryIterator extends HashIterator
        implements Iterator<Map.Entry<K,V>> {
        public final Map.Entry<K,V> next() { return nextNode(); }
    }

其实这里已经很明明晰,当要获得某个value时,软件开发,keySet还需要从HashMap中get,entrySet对比keySet少了遍历table的进程,软件开发,这也是两者机能上的主要不同。

2. Map.foreach

在JDK8今后,引入了Map.foreach。

Map.foreach本质仍然是entrySet

default void forEach(BiConsumer<? super K, ? super V> action) {
        Objects.requireNonNull(action);
        for (Map.Entry<K, V> entry : entrySet()) {
            K k;
            V v;
            try {
                k = entry.getKey();
                v = entry.getValue();
            } catch(IllegalStateException ise) {
                // this usually means the entry is no longer in the map.
                throw new ConcurrentModificationException(ise);
            }
            action.accept(k, v);
        }
    }

共同lambda表达式一起利用,操纵起来越发利便。

2.1 利用Java8的foreach+lambda表达式遍历Map

Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);

items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));

items.forEach((k,v)->{
    System.out.println("Item : " + k + " Count : " + v);
    if("E".equals(k)){
        System.out.println("Hello E");
    }
});

Reference:

  1.  http://lizhuang.iteye.com/blog/2356044
  2.  http://blog.163.com/fw_long/blog/static/51771186201392982041337/
  3.  https://yq.aliyun.com/articles/44712