Java HashMap 遍歷方式探討
阿新 • • 發佈:2017-08-24
current entryset exceptio iterator 取出 usually ica class void
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); } 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"); } });
Java HashMap 遍歷方式探討