首页 > 代码库 > Map集合
Map集合
一、基本操作
1.添加 map.put(key,value); //返回添加的值value
2.删除 map.remove(key); //返回删除的值value
3.判断包含 map.containsKey(key);
4.获取 map.get(key);
public static void method(Map<Integer,String>map){//学号和姓名 //添加元素 System.out.println(map.put(8,"wangcai")); //nul System.out.println(map.put(8,"xiaoqiang"));//wangcai,存相同键会覆盖 map.put(2,"zhouliu"); map.put(6,"zhaosi"); //删除 System.out.println("remove:"+map.remove(2)); //判断包含 System.out.println("containskey:"+map.containsKey(2)); //获取 System.out.println("get:"+map.get(7)); System.out.println(map); }
注意:直接打印System.out.println(map)会以这种形式打出{2=zhouliu, 6=zhaosi, 8=xiaoqiang}
二、三种遍历方式
1.values方法--只能遍历得到所有value值
Collection<String> values=map.values(); Iterator<String> it2=values.iterator(); while (it2.hasNext()){ System.out.println(it2.next()); }
Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法。
keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
2.keySet()方法
//取出map中的所有元素。通过keySet方法获取map中键所在的Set集合,在通过Set的迭代器获取到每一个键,//再对每一个键获取其对应的值接即可。 Set<Integer>keySet=map.keySet(); Iterator<Integer> it1=keySet.iterator(); while(it.hasNext()){ Integer key=it1.next(); String value =map.get(key); System.out.println(key+":"+value); }
3.entrySet()方法
/* * interface MyMap{ * Public static interface MyEntry{ //内部接口 * void get(); * } * } * * class MyDemo implements MyMap.MyEntry{ * public void get(){} * } */ Set <Map.Entry<Integer, String>> entrySet=map.entrySet(); Iterator<Map.Entry<Integer, String>> it=entrySet.iterator(); while(it.hasNext()){ Map.Entry<Integer,String > me=it.next(); Integer key =me.getKey(); String value =me.getValue(); System.out.println(key+"::"+value); }
三、练习
问题:"abgdA heojo1ajoj"获取该字符串,每个字母出现的次数,要求打印结果是:a(2)b(1)。。。。。
分析:对于结果的分析,字母和次数之间存在映射关系。而且这种关系很多,很多就需要存储,能存储映射关系的容器有数组和Map集合。
* 关系中一方是有序编号吗?没有!
* 那就是使用Map集合。又发现可以保证唯一性的一方具备着顺序 abc。。。
* 所以可以使用TreeMap集合。
* 这个集合中最终应该存储的是字母和次数的对应关系。
* 1.因为操作的是字符串中的字母,所以先将字符串变成字符数组。
* 2.遍历字符数组,用每一个字母作为键去查Map集合这个表。
* 如果该字母键不存在,就将该字母作为键1作为值存储在map集合中。
* 如果该字母键存在,就将该字母键作为对应值取出+1,再存在map集合中
* 键相同值会覆盖。这样就记录住了该字母的次数。
* 3.遍历结束,map集合就记录所有字母出现的次数。
代码实现:
public class MapTest { public static void main(String[] args) { String str="abgdA heojo1ajoj"; String s=getCharCount(str); System.out.println(s); } public static String getCharCount(String str) { //将字符串变成字符数组 char[] chs=str.toCharArray(); //定义map集合表 Map<Character,Integer>map =new TreeMap<Character,Integer>(); for (int i = 0; i < chs.length; i++) { if(!(chs[i]>=‘a‘&&chs[i]<=‘z‘ || chs[i]>=‘A‘&&chs[i]<=‘Z‘)) continue; //将数组中的字母作为键去查map表 Integer value =http://www.mamicode.com/map.get(chs[i]); //判断是否为null if (value=http://www.mamicode.com/=null) { map.put(chs[i], 1); } else{ map.put(chs[i],value+1); } } //return (map.toString()); return mapToString(map); } private static String mapToString(Map<Character, Integer> map) { StringBuilder sb=new StringBuilder(); Iterator<Character>it =map.keySet().iterator(); while(it.hasNext()){ Character key=it.next(); Integer value=map.get(key); sb.append(key+"("+value+")"); } return sb.toString(); }}
总结:当存在一一映射这样的数据关系时应该联想到map方法。
Map集合