JAVA基础 - Map集合

一、常用API

package com.java.base;
/*
目标:认识map体系的特点:按照键无序、不重复、无索引,值不做要求;
一、Map集合体系特点
1、map集合的特点都是由键决定的
2、map集合的键是无序、不重复的,无索引的,值不做要求(可以重复)
3、map集合后面重复的键对应的值会覆盖前面重复键的值
4、map集合的键值对都可以为null
二、map集合实现类特点
1、HashMap:元素按照键是无序、不重复、无索引,值不做要求(与map体系一致)
2、linkedHashMap:元素按照键是有序、不重复、无索引,值不做要求
3、TreeMap:元素按照键是排序、不重复、无索引,值不做要求
* */

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

public class MapDemo {
    public static void main(String[] args) {
    //1、创建一个map集合对象
        Map<String,Integer> maps = new HashMap<>();
        maps.put("nike",3);
        maps.put("anta",123);
        maps.put("nike",300);//会覆盖前面的
        maps.put("java",3);
        maps.put(null,null);
        System.out.println(maps);//输出结果:{java=3, nike=300, anta=3, null=null}

        //2、清空集合
        //maps.clear();
        //System.out.println(maps);

        //3、判断集合是否为空,为空返回true
        System.out.println(maps.isEmpty());//集合不为空,故返回false

        //4、根据键获取对应的值:get
        System.out.println(maps.get("java"));//输出3
        System.out.println(maps.get("斐乐"));//获取不存在的键值,则输出null

        //5、根据键删除整个元素(删除键会返回键的值)
        System.out.println(maps.remove("anta"));

        //6、判断是否包含某个键,包含返回true
        System.out.println(maps.containsKey("java"));

        //7、判断是否包含某个值
        System.out.println(maps.containsValue(100));//不包含,返回false

        //8、获取全部键的集合,keyset
        Set<String> sets = maps.keySet();
        System.out.println(sets);

        //9、获取全部值的集合,Collection values
        Collection<Integer> values = maps.values();
        System.out.println(values);

        //10、集合的大小
        System.out.println(maps.size());

    }
}

二、Map遍历方式:键找值

package com.java.base;

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

public class MapDemo {
    public static void main(String[] args) {
    //1、创建一个map集合对象
        Map<String,Integer> maps = new HashMap<>();
        maps.put("娃娃",30);
        maps.put("iphoneX",100);
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);//输出结果:{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=30}

        //2、键找值:第一步,先拿到集合的全部键
        Set<String> sets = maps.keySet();//maps.keySet() 此处快捷键alt+回车,选第二个
        //3、第二步,遍历每个键,根据键提取值
        //sets.for 回车 ,便快捷输出foreach语句
        for (String set : sets) {
            int value = maps.get(set);//获取键的值
            //输出结果:huawei======>1000
            //手表======>10
            //生活用品======>10
            //iphoneX======>100
            //娃娃======>30
            System.out.println(set +"======>"+value);
            
        }

    }
}

 三、案例

package com.java.base;

/*
需求:统计投票人数
某个班级80名学生,现在需要组成秋游活动,班长提供了四个景点依次是(ABCD),每个学生只能选择一个景点,请统计出最终哪个景点想去的人数最多
分析:
1、将80个学生选择的数据拿到程序中去
2、定义map集合用于存储最终统计的结果
3、遍历80个学生选择的数据,看map集合中是否存在,不存在存入“数据=1”,存在则其对应值+1
 */

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

public class MapDemo {
    public static void main(String[] args) {
        //1、把80个学生选择的数据拿进来
        String [] selects = {"A","B","C","D"};
        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 80; i++) {
            //BDCABDCCCCDACCCCBABABBCBAAADDCBBDCADDDCBDBDCDDAAACACACCABBDDAACBCBCACBBDAACDBADB
            sb.append(selects[r.nextInt(selects.length)]);
        }
        System.out.println(sb);

        //2、定义一个map集合记录最终统计的结果:A=30,B=20,C=20,D=10
        Map<Character,Integer> infos = new HashMap<>();

        //3、遍历80个学生选择的数据
        for (int i = 0; i < sb.length(); i++) {
            //4、提取当前选择景点字符
            char ch = sb.charAt(i);
            //5、判断map集合中是否存在这个键
            if(infos.containsKey(ch)){
                //让其值+1
                infos.put(ch,infos.get(ch)+1);
            }else {
                //说明此景点是第一次被选
                infos.put(ch,1);
            }
        }
        //4、输出集合:{A=20, B=19, C=23, D=18}
        System.out.println(infos);
    }
}

 

posted @ 2022-01-27 20:42  一加一  阅读(103)  评论(0编辑  收藏  举报