如何遍历Map中的对象

xiaoxiao2021-02-28  13

原文地址为: 如何遍历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中的对象
转载请注明原文地址: https://www.6miu.com/read-1900051.html

最新回复(0)