使用多種方式實現遍歷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 }
相關文章
相關標籤/搜索