Map类相关

Map

1.1 Map集合概述和使用

Map集合描述

  • Interface Map<K,V> K:键的类型 V:值的类型
  • 将键映射到值的对象;不能包含重复的对象;每个键可以映射到最多一个值
  • 举例:学生的学号和对象

​ id0001 张三

​ id0002 李四

​ id0003 王五

创建Map集合对象

  • 多态的方式
  • 具体的实现类HashMap

范例:

package com.fun01;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 23389.
 * @date 2021/6/26.
 */

/*
Map集合描述

- Interface Map<K,V>      K:键的类型   V:值的类型
- 将键映射到值的对象;不能包含重复的对象;每个键可以映射到最多一个值
- 举例:学生的学号和对象

​        id0001       张三

​       id0002        李四

​       id0003        王五



创建Map集合对象

- 多态的方式
- 具体的实现类HashMap



 */
public class MapDemo01 {
    public static void main(String[] args) {
        //创建Map集合对象
        Map<String,String> map = new HashMap<String,String>();
        //添加集合元素  V put(K key, V value)
        map.put("id0001","张三");
        map.put("id0002","李四");
        map.put("id0003","王五");

        //修改
        map.put("id0003","刘六");

        //输出map
        System.out.println(map);

    }

}

1.2 Map集合的基本功能

方法名说明
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对应元素
void clear()移除所有键值对应元素
boolean containsKey(Object key)判断集合是否包含指定的键值
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合重键值对的元素

范例:

package com.fun01;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 23389.
 * @date 2021/6/26.
 */

/*
| 方法名                              | 说明                                 |
| ----------------------------------- | ------------------------------------ |
| V put(K key,V value)                | 添加元素                             |
| V remove(Object key)                | 根据键删除键值对应元素               |
| void clear()                        | 移除所有键值对应元素                 |
| boolean containsKey(Object key)     | 判断集合是否包含指定的键值           |
| boolean containsValue(Object value) | 判断集合是否包含指定的值             |
| boolean isEmpty()                   | 判断集合是否为空                     |
| int size()                          | 集合的长度,也就是集合重键值对的元素 |


 */
public class MapDemo02 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        // V put(K key,V value)                | 添加元素                             |
        map.put("郭靖", "黄蓉");
        map.put("杨过", "小龙女");
        map.put("张无忌", "赵敏");

        //| V remove(Object key)                | 根据键删除键值对应元素               |
        //System.out.println(map.remove("杨过"));

        // void clear()                        | 移除所有键值对应元素                 |
//        map.clear();

        //| boolean containsKey(Object key)     | 判断集合是否包含指定的键值           |

//        System.out.println(map.containsKey("张无忌"));
//        System.out.println(map.containsKey("张三"));

//        | boolean containsValue(Object value) | 判断集合是否包含指定的值
//        System.out.println(map.containsValue("小龙女"));
//        System.out.println(map.containsValue("小改改"));

//       | boolean isEmpty()                   | 判断集合是否为空
//        System.out.println(map.isEmpty());

//        | int size()                          | 集合的长度,也就是集合中键值对的元素 |
        System.out.println(map.size());

        System.out.println(map);
    }
}

1.3 Map集合的获取功能

方法名说明
V get(Object key)根据键获取值
Set keySet()获取所有键的集合
Collection values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

1.4 Map集合的遍历(方式一)

我们刚才存储的元素都是成对出现的,所以我们把Map看出是一个夫妻的集合

遍历思路:

  • 把所有的丈夫集中起来
  • 遍历丈夫的集合,获取每一个丈夫
  • 根据丈夫去找到对应的妻子

装换成Map集合中的操作:

  • 获取所有键的集合,用keySet()方法实现
  • 遍历键的集合,获取每一个键,用增强for实现
  • 根据键去找值,用get(Object key)方法实现
package com.fun02;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 23389.
 * @date 2021/6/26.
 */
/*

 */
public class MapDemo01 {
    public static void main(String[] args){
        Map<String,String> map = new HashMap<String,String>();

        map.put("刘备","孙尚香");
        map.put("吕布","貂蝉");
        map.put("杨过","小龙女");

        Set<String> set = map.keySet();
        
        for(String key : set){
            String value = map.get(key);
            System.out.println(key + "," + value);
        }

        System.out.println(map);
    }
}

1.5 Map集合的遍历(方式二)

我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻的集合

遍历思路:

  • 获取所有结婚证的集合
  • 遍历结婚证的集合,得到每一个结婚证
  • 根据结婚证获取丈夫和妻子

转换为Map集合后中的操作

  • 获取所有键值对对象的集合

​ Set<Map.Entry<K,V>> entrySet() :获取所有键值对对象的集合

  • 遍历键值对对象的集合,得到每一个键值对对象

​ 用增强for循环实现,得到每一个Map.Entry

  • 根据键值对对象获取键和值

    用getKey()得到键

    用getValue()得到值

    package com.fun02;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * @author 23389.
     * @date 2021/6/26.
     */
    
    /*
    遍历思路:
    
    - 获取所有结婚证的集合
    - 遍历结婚证的集合,得到每一个结婚证
    - 根据结婚证获取丈夫和妻子
    
    
    
    转换为Map集合后中的操作
    
    - 获取所有键值对对象的集合
    
    ​      Set<Map.Entry<K,V>> entrySet() :获取所有键值对对象的集合
    
    - 遍历键值对对象的集合,得到每一个键值对对象
    
    ​      用增强for循环实现,得到每一个Map.Entry
    
    - 根据键值对对象获取键和值
    
      用getKey()得到键
    
      用getValue()得到值
     */
    
    public class MapDemo02 {
        public static void main(String[] args){
            Map<String,String> map = new HashMap<String,String>();
    
            map.put("项羽","虞姬");
            map.put("刘备","孙尚香");
            map.put("吕布","貂蝉");
    
            Set<Map.Entry<String, String>> entrySet = map.entrySet();
    
            for(Map.Entry<String, String> me: entrySet){
                String key = me.getKey();
                String value = me.getValue();
                System.out.println(key + "," + value);
            }
    
    
        }
    }
    
    

1.4 HashMap集合存储学生对象并遍历

需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student),存储三个键值元素,并遍历

思路:

①定义学生类

②创建HashMap集合对象

③创建学生对象

④把学生对象添加到集合

⑤遍历集合

​ 方式1:键找值

​ 方式2:键值对对象找键和值

package com.fun03;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 23389.
 * @date 2021/6/27.
 */
public class HashMapDemo {
    public static void main(String[] args) {
        Map<String, Student> map = new HashMap<String, Student>();

        Student s1 = new Student("张山", 18);
        Student s2 = new Student("李四", 19);
        Student s3 = new Student("王五", 20);

        map.put("10001", s1);
        map.put("10002", s2);
        map.put("10003", s3);

        Set<String> set = map.keySet();
        for (String key : set) {
            Student student = map.get(key);
            System.out.println(key + "," + student.getName() + "," + student.getAge());
        }

        System.out.println("-----------");


        Set<Map.Entry<String, Student>> entrySet = map.entrySet();
        for (Map.Entry<String, Student> me : entrySet) {
            String key = me.getKey();
            Student value = me.getValue();
            System.out.println(key + "," + value.getName() + "," + value.getAge());
        }

    }
}

1.5HashMap集合存储学生对象并遍历

需求:创建一个HashMap集合,键是学生对象(Student),值是居住地(String).存储多个键值对对象,并遍历

要求:保证键的唯一性:如果学生对象的成员变量值相同,我们认为是同一个对象。

思路:

①定义学生类

②创建HashMap集合对象

③创建学生对象

④把学生对象添加到集合

⑤遍历集合

​ 方式1:键找值

​ 方式2:键值对对象找键和值

⑥在学术类中重写两个方法

​ hashCode()

​ equals()

package com.fun04;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 23389.
 * @date 2021/6/27.
 */
public class HashMapDemo {
    public static void main(String[] args) {
        HashMap<Student,String> hm = new HashMap<Student,String>();

        Student s1 = new Student("林曼玉",30);
        Student s2 = new Student("小龙女",25);
        Student s3 = new Student("柳岩",20);
        Student s4 = new Student("柳岩",20);

        hm.put(s1,"武汉");
        hm.put(s2,"广州");
        hm.put(s3,"西安");
        hm.put(s4,"浙江");


        Set<Student> set = hm.keySet();
        for(Student s : set){
            String value = hm.get(s);
            System.out.println(s.getName() + "," + s.getAge() + "," + value);
        }

        System.out.println("----------");

        Set<Map.Entry<Student, String>> entrySet = hm.entrySet();
        for(Map.Entry<Student, String> me : entrySet){
            Student key = me.getKey();
            String value = me.getValue();
            System.out.println(key.getName() + "," + key.getAge() + "," + value);
        }

    }
}

1.6ArrayList集合存储HashMap

需求:创建一个ArrayList集合,存储三个元素,都是HashMap,每一个HashMap的键和值都是String类型,并遍历

思路:
①创建ArrayList集合

②创建HashMap集合,并添加键值对元素

③把HashMap作为元素添加到ArrayList集合

④遍历ArrayList集合

package com.fun05;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author 23389.
 * @date 2021/6/27.
 */
public class AyyayListDemo {
    public static void main(String[] args) {
        ArrayList<HashMap<String,String>> arr = new ArrayList<HashMap<String,String>>();

        HashMap<String,String> map1 = new HashMap<String,String>();
        HashMap<String,String> map2 = new HashMap<String,String>();
        HashMap<String,String> map3 = new HashMap<String,String>();

        map1.put("孙策","大乔");
        map1.put("周瑜","小乔");

        map2.put("郭靖","黄蓉");
        map2.put("杨过","小龙女");

        map3.put("令狐冲","任盈盈");
        map3.put("林平之","岳灵珊");


        arr.add(map1);
        arr.add(map2);
        arr.add(map3);

        for(HashMap<String,String> map : arr){
            Set<String> set = map.keySet();
            for(String key : set){
                String value = map.get(key);
                System.out.println(key + "," + value);
            }

        }





    }
}

1.7 HashMap集合存储ArrayList元素并遍历

需求:创建一个HashMap集合,存储三个键值对元素,每一个键值对元素的键都是String,值是ArrayList,

每一个ArrayList集合的元素是String,遍历

思路:

1.第一个ArrayList集合的元素:(三国演义)

诸葛亮

赵云

2.第二个ArrayList集合的元素:(水浒传)

武松

鲁智深

3.第三个ArrayList集合的元素:(西游记)

孙悟空

唐僧

package com.fun05;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/**
 * @author 23389.
 * @date 2021/6/27.
 */
public class HashMapIncludeArrDemo {
    public static void main(String[] args) {
        HashMap<String,ArrayList<String>> hs = new HashMap<String,ArrayList<String>>();

        ArrayList<String> arr1 = new ArrayList<String>();
        ArrayList<String> arr2 = new ArrayList<String>();
        ArrayList<String> arr3 = new ArrayList<String>();


        arr1.add("诸葛亮");
        arr1.add("赵云");

        arr2.add("武松");
        arr2.add("鲁智深");

        arr3.add("孙悟空");
        arr3.add("唐僧");

        hs.put("三国演义",arr1);
        hs.put("水浒传",arr2);
        hs.put("西游记",arr3);

        Set<String> keySet = hs.keySet();
        for(String key : keySet){
            System.out.println(key);
            ArrayList<String> list = hs.get(key);
            for(String s : list){
                System.out.println("\t" + s);
            }

        }
    }
}

1.8统计字符串中每个字符出现的次数

需求:键盘录入一个字符串,要求统计字符串每个字符出现的次数。

举例: 键盘录入“aababcabcdabcde” 在控制台输出a(5) b(4) c(3) d(2) e(1)

分析:
①我们可以把结果分成几个部分来看:a(5) ,b(4) ,c(3) ,d(2), e(1)

②每一个部分可以看成是键值对:字符和对应的次数组成

③这样的数据,我们可以通过HashMap集合来存储,键是字符,值是字符出现的次数

注意:键是字符,类型应该是Character,值是字符出现的次数,类型应该是Integer

思路:

①键盘录入一个字符串

②创建HashMap集合,键是Character,值是Integer

③遍历字符串,得到每一个字符

④拿得到的每一个字符作为HashMap集合中去找对应的值,看起返回值

如果返回值为null,说明该字符在HashMap集合中不存在,就把该字符作为键,1为值存储

如果返回值不为null,说明该字符在HashMap集合中存在,把该值加1,然后重写存储该字符和对应的值

⑤遍历HashMap集合,得到键和值,按要求进行拼接

⑥输出结果

package com.fun06;

import sun.reflect.generics.tree.Tree;

import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

/**
 * @author 23389.
 * @date 2021/6/27.
 */
public class HashMapDemo {
    public static void main(String[] args) {
        System.out.println("请输入一个字符串:");
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();

        //创建HashMap集合对象
//        HashMap<Character,Integer> hm = new HashMap<Character,Integer>();
        TreeMap<Character,Integer> hm = new TreeMap<Character,Integer>();


        //遍历字符串,得到每一个字符
        for(int i = 0;i < line.length();i++){
            char key = line.charAt(i);

            //拿得到的每一个字符作为键到HashMap集合中找对应的值,看其返回值
            Integer value = hm.get(key);
            if(value == null){
                hm.put(key,1);
            }else{
                value++;
                hm.put(key,value);
            }
        }

        StringBuilder sb = new StringBuilder();
        Set<Character> keySet = hm.keySet();
        for(Character key : keySet){
            Integer value = hm.get(key);
            sb.append(key).append("(").append(value).append(")");
        }
        String result = sb.toString();
        System.out.println(result);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值