zoukankan      html  css  js  c++  java
  • 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 =map.get(chs[i]);
            //判断是否为null
            if (value==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方法。

  • 相关阅读:
    P2949 [USACO09OPEN]工作调度Work Scheduling
    P1279 字串距离 (动态规划)
    P2634 [国家集训队]聪聪可可
    点分治模板
    网站收集
    P1131 [ZJOI2007]时态同步
    P1446 [HNOI2008]Cards
    P1437 [HNOI2004]敲砖块
    蓝桥杯-k倍区间
    atom / vscode (配置c++环境流程)
  • 原文地址:https://www.cnblogs.com/xiangkejin/p/5934229.html
Copyright © 2011-2022 走看看