首页 > 代码库 > 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集合