如何遍历Map中的对象

原文地址为: 如何遍历Map中的对象

众所周知,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)

转载请注明本文地址: 如何遍历Map中的对象

猜你喜欢

转载自blog.csdn.net/wangchaoqi1985/article/details/80841438
今日推荐