如何遍歷Map中的物件

shuaishuai3409發表於2016-08-14

眾所周知,java中Iterator、Collection和Map都是頂層介面。在遍歷集合Collection時,可以使用迭代器Iterator,加快遍歷速度。但是對於Map不是集合,內部不含有iterator,那麼該如何遍歷Map中的物件呢?


首先要明確,Map是將Key對映到Value的物件,每個鍵最多對應一個值,必須得保證key的唯一性。故當map中存在相同key時,值會被後者覆蓋掉。而且Map不同於Collection儲存單列元素,其儲存的是雙列元素,在沒有迭代器的情況下,取出雙列元素需要好好動動腦子。


這裡用到map中的Set<k> keySet()、Set<Map.Entry<K,V>>entrySet()方法。前者返回map對映關係中所包含的key的檢視(set集合),後者將鍵和值的對映關係作為物件存在set集合中,型別是Map.Entry(介面,含有 k getKey()、v getValue()、v setValue(v value)等方法)。

這樣,通過將map轉成set,就可以利用set集合中的迭代器獲取到每一個鍵,在獲取對應的值,進行輸出列印。


以簡單demo為例:
“cbacbaa”獲取該字串的每一個字母出現次數,要求列印結果為a(3)b(2)c(2).

設計思想:分別用keySet和entrySet實現。

package cn.ishuai.p1.map;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class CountStr {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s="sdfsdff";
        char []cha=s.toCharArray();
        Map<Character,Integer>map=new TreeMap<Character,Integer>();
        for(char i:cha){
            Integer value=map.get(i);
            if(value==null) map.put(i, 1);
            else map.put(i, value+1);
        }
        keySetNum(map);
        entrySetNum(map);//兩種不同遍歷方式
    }

    private static void entrySetNum(Map<Character, Integer> map) {
        // TODO Auto-generated method stub
        Set<Map.Entry<Character, Integer>>set=map.entrySet();
        Iterator<Map.Entry<Character,Integer>>it=set.iterator();
        while(it.hasNext()){
            Map.Entry<Character,Integer>me=it.next();
            Character cha=me.getKey();
            Integer inte=me.getValue();
            System.out.println(cha+"("+inte+")");
        }
    }

    private static void keySetNum(Map<Character, Integer> map) {
        // TODO Auto-generated method stub
        Set<Character>set=map.keySet();
        Iterator<Character> it=set.iterator();
        while(it.hasNext()){
            char cha=(char) it.next();//換成character
            Integer value=map.get(cha);
            System.out.println(cha+"("+value+")");
        }
    }

}

結果:
a(3)
b(2)
c(2)

相關文章