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方法。

原文地址:https://www.cnblogs.com/xiangkejin/p/5934229.html