[Java]Map集合,集合嵌套

 

Map集合由键和值组成,整个集合的特点都由键决定。

Map集合的键是无序不重复的,值不做要求可以重复。

 Map集合常用API:

package wryyyyy;

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> maps1 = new HashMap<>();//map是接口
        maps1.put("Java",12);
        maps1.put("Html",32);
        maps1.put("C++",76);
        maps1.put("Java",100);//键值重复是会覆盖前面的
        System.out.println(maps1);

        //2.清空集合
        //maps1.clear();

        //3.判断集合是否为空
        System.out.println(maps1.isEmpty());

        //4.获取键对应的值
        Integer key = maps1.get("Java");
        System.out.println(key);
        System.out.println(maps1.get("html"));//没有这个键则取出值为null

        //5.根据键删除整个元素
        System.out.println(maps1.remove("Java"));//返回被删除元素的值
        System.out.println(maps1);

        //6.判断是否包含某个键
        System.out.println(maps1.containsKey("Html"));

        //7.判断是否包含某个值
        System.out.println(maps1.containsValue(100));

        //8.获取全部键的集合
        Set<String> sets = (maps1.keySet());//keySet:把键变成set集合
        System.out.println(sets);//[C++, Html]

        //9.获取全部值的集合
        Collection<Integer> values = maps1.values();//不把值放到set集合而是collection集合:set集合不重复,会去掉重复的值
        System.out.println(values);

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

        //11.合并其他map集合
        Map<String,Integer> map1 = new HashMap<>();
        map1.put("Java1",1);
        map1.put("Java2",22);
        Map<String,Integer> map2 = new HashMap<>();
        map2.put("Java2",45);//会覆盖前面的
        map2.put("Java3",90);
        map1.putAll(map2);//把集合2中元素拷贝到map1中去
        System.out.println(map1);//{Java2=45, Java3=90, Java1=1}
    }
}

 Map集合的遍历:

方法1: 

 方法2:

方法3:

package wryyyyy;

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

public class MapDemo
{
    public static void main(String[] args)
    {
        //1.创建一个Map集合对象
        Map<String,Integer> maps1 = new HashMap<>();
        maps1.put("Java",12);
        maps1.put("Html",32);
        maps1.put("C++",76);
        maps1.put("Python",100);
        System.out.println(maps1);

        //1.方法1:键找值
        Set<String> keys = maps1.keySet();
        for (String key : keys)
        {
            int value = maps1.get(key);
            System.out.println(key+"===>"+value);
        }

        //方法2:键值对
        //先把map集合转换成set集合,set集合中每个元素都是键值对实体类型了
        Set<Map.Entry<String,Integer>> entries = maps1.entrySet();
        //遍历set集合提取键以及提取值
        for (Map.Entry<String, Integer> entry : entries)
        {
            String key = entry.getKey();
            int value = entry.getValue();
            System.out.println(key+"====>"+value);
        }

        //方法3:Lambda表达式
        maps1.forEach(new BiConsumer<String, Integer>()
        {
            @Override
            public void accept(String key, Integer value)
            {
                System.out.println(key+"====>"+value);
            }
        });
    }
}

 Map集合案例:统计投票人数

package wryyyyy;

import java.util.*;
import java.util.function.BiConsumer;

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++)
        {
            sb.append(selects[r.nextInt(selects.length)]);
        }
        System.out.println(sb);

        //2.定义一个map集合记录最终统计结果
        Map<Character,Integer> infos = new HashMap<>();

        //3.遍历学生选择的数据
        for (int i = 0; i < sb.length(); i++)
        {
            //4.提取当前内容
            char ch = sb.charAt(i);

            //5.判断map集合中是否存在这个键
            if (infos.containsKey(ch))
            {
                infos.put(ch,infos.get(ch)+1);//+1
            }
            else
            {
                //说明此景点是第一次统计
                infos.put(ch,1);
            }
        }

        //输出map集合
        System.out.println(infos);
    }
}

HashMap: 

 如果键要存储的是自定义对象,则需要重写hashCode和equals方法。

LinkedHashMap:

 TreeMap:

TreeSet和TreeMap底层原理是一样的。

TreeMap集合自定义排序规则:

(1)类实现Comparable接口,重写比较规则

(2)集合自定义Comparator比较器对象,重写比较规则

//TreeMap集合自带排序
        Map<Apple,String> maps = new TreeMap<>(new Comparator<Apple>() {
            @Override
            public int compare(Apple o1, Apple o2) {
                return Double.compare(o2.getPrice(),o1.getPrice());
                //只要return值不为0就不认为重复
            }
        });

集合嵌套:

package wryyyyy;

import java.util.*;

public class MapDemo
{
    public static void main(String[] args)
    {
        //1.记录每个学生选择的情况
        Map<String,List<String>> data = new HashMap<>();

        //2.把学生选择的数据存进去
        List<String> selects1 = new ArrayList<>();
        Collections.addAll(selects1,"A","C");
        data.put("小王",selects1);
        List<String> selects2 = new ArrayList<>();
        Collections.addAll(selects2,"B","C","D");
        data.put("小李",selects2);
        List<String> selects3 = new ArrayList<>();
        Collections.addAll(selects3,"A","B","D");
        data.put("小孙",selects3);
        List<String> selects4 = new ArrayList<>();
        Collections.addAll(selects4,"C","D");
        data.put("小于",selects4);
        System.out.println(data);

        //统计每个景点选择的人数
        Map<String,Integer> infos = new HashMap<>();

        //提取所有人选择景点的信息
        Collection<List<String>> values = data.values();//ctrl+alt+V

        //遍历每个人选的信息
        for (List<String> value : values)
        {
            for (String s : value)
            {
                if (infos.containsKey(s))
                {
                    infos.put(s,infos.get(s)+1);
                }
                else
                {
                    infos.put(s,1);
                }
            }
        }

        System.out.println(infos);
    }
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*.xml) 3.用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容; 4. 文档生成后有时需要手动修改,查找第一步中设置的属性名,可能会产生类似${n.....ame}类似的样子,我们将将名字中间的标签删掉,恢复为${name} 5. word模板中有表格,需要循环的位置, 用 标签将第二对 标签(即除表头的w:tr标签后的一对)包围起来 同时表格内的属性例如${name},在这里需要修改为${user.name} (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用,注意这里的标签不要和某对其他标签交叉,不可以出现这种 6. 标识替换完之后,另存为.ftl后缀文件即可。 代码里是相对有一丢丢复杂的,两层嵌套循环; 总(dataMap) deptName 部门名 list(Table)表的集合 table1(map) table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table2 table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table3 ……

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值