题目:

有一个记事本,能记录周一到周天,每天做的所有事情和事情的次数,周而复始。小明在这个记事本上记录了3周,内容如下:

第一周
·周一:学java,逛街
·周二:打台球,旅游
·周三:溜冰,吃烧烤
·周四:打篮球,逛街,吃烧烤
·周五:学前端,溜冰
·周六:逛街,吃烧烤
·周天:旅游,打台球

第二周:
·周一:学java,学前端
·周二:打台球,溜冰,学java
·周三:旅游,吃烧烤
·周四:逛街,学java
·周五:学前端,旅游
·周六:逛街,打台球,吃烧烤
·周天:旅游,逛街,打台球,吃烧烤

·第三周:
·周一:学java,学前端,学python
·周二:打台球,溜冰,学java,学C++
·周三:旅游,吃烧烤,吃冰淇淋
·周四:逛街,学java,吃烧烤
·周五:学前端,旅游,打高尔夫
·周六:逛街,打台球,吃烧烤,溜冰,蹦迪
·周天:旅游,逛街,打台球,吃烧烤,跑步

使用Scanner接收小明3周所做的所有事情,并存入相应的集合中。然后输出周一到周五(不区分第几周)小明所做的所有事情以及相应的次数。(要求:所选的集合都要用泛型进行约束。)

方法一(使用集合嵌套):

public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//创建嵌套集合TreeMap<String, Map<String, Integer>> week = new TreeMap<>();//数据录入for (int i = 1; i <= 3; i++) {//外层for循环代表周次System.out.println("第" + i + "周:");HashMap<String, Integer> map;for (int j = 1; j <= 7; j++) {//内层for循环代表星期几map = new HashMap<>();//每天都会清空昨天的事情和次数System.out.print("周" + j + ":");String things = sc.next();//旅游,逛街,打台球,吃烧烤,跑步等String[] things_arr = things.split(",");//用逗号切割字符串,再存入mapfor (String s : things_arr) {//map存入的是:事情和次数map.put(s, map.containsKey(s) ? map.get(s) + 1 : 1);}//将map存入week集合,第一次直接存入,后面存入的是新旧结合后的mapif (week.containsKey("周" + j)) {Map<String, Integer> map1 = week.get("周" + j);//新旧map按如下方式结合Set<String> keys = map.keySet();for (String key : keys) {if (map1.containsKey(key)) {map1.put(key, map1.get(key) + map.get(key));} else {map1.put(key, map.get(key));}}} else {week.put("周" + j, map);}}}//数据输出 week 遍历键值对Set<Map.Entry<String, Map<String, Integer>>> weeks = week.entrySet();for (Map.Entry<String, Map<String, Integer>> week1 : weeks) {System.out.println(week1.getKey() + ":");Map<String, Integer> map = week1.getValue();//里面的 map 也遍历键值对Set<Map.Entry<String, Integer>> things = map.entrySet();for (Map.Entry<String, Integer> thing : things) {String key = thing.getKey();Integer count = thing.getValue();System.out.print(key + "--" + count + "次 \t");}System.out.println();//换行}}
}

结果:

方法一(不使用集合嵌套):

public static void main(String[] args) {Scanner sc = new Scanner(System.in);TreeMap<String, String> wt = new TreeMap<>();// 创建 星期-事件 键值对的map集合TreeMap<String, Integer> tt = new TreeMap<>();// 创建 事件-次数 键值对的map集合TreeMap<Integer, String> w = new TreeMap<>();// 创建 序号-星期 键值对的map集合,并将一周七天添加进来w.put(1, "周一");w.put(2, "周二");w.put(3, "周三");w.put(4, "周四");w.put(5, "周五");w.put(6, "周六");w.put(7, "周天");// 数据输入for (int i = 1; i <= 3; i++) {// 外层for表示周次System.out.println("\t第" + i + "周:");for (int j = 1; j <= 7; j++) {// 内层for表示星期几String strw = w.get(j);// 由序号-星期 键值对的map集合 得到星期的字符串System.out.print(strw + ":");String str = sc.next();// 由输入得到事件的总字符串// 第一次将事件字符串直接添加,后面则与原事件字符串进行拼接后添加if (wt.containsKey(strw)) {wt.put(strw, wt.get(strw) + "," + str);} else {wt.put(strw, str);}}}// 结果输出for (int i = 1; i <= 7; i++) {// 循环每周七天,每天分别输出// 调取该星期的事件总字符串,由事件总字符串获得对应的 事件-次数 键值对的map集合String strw = w.get(i);for (String s : wt.get(strw).split(",")) {if (tt.containsKey(s))tt.replace(s, tt.get(s) + 1);elsett.put(s, 1);}// 根据 事件-次数 键值对的map集合 进行输出System.out.print("\n" + strw + "做的事:");Set keys = tt.keySet();for (Object key : keys) {System.out.print(key + "(" + tt.get(key) + "次)" + ",");}tt.clear();// 每星期输出完毕后,都清空 事件-次数 键值对的map集合,方便后续输出}}

结果:

小汤学编程之JAVA经典例题——嵌套集合相关推荐

  1. 小汤学编程之MySQL经典例题——表的创建与查询

    题目: 会员类型表UserTypeInfo [系统管理员-管理会员 店主-卖家 普通会员-买家] 类型编号 typeId int 主键 自增长 类型名 typeName varchar(20) 不能为 ...

  2. 小汤学编程之JAVA基础day12——异常

    一.什么是异常 1.程序错误类型     2.异常的分类     3.深入认识异常 二.异常的继承结构 三.常见的异常收集 四.虚拟机对异常的两种处理方式 1.捕获异常     2.声明和抛出异常 五 ...

  3. 小汤学编程之JAVA基础day05——数组

    一.概念 1.什么是数组      2.为什么要用到数组 二.使用方法 1.声明并分配空间      2.赋值     3.处理数据 三.数组的各种应用 1.求数组中最大/最小值      2.数组反 ...

  4. 小汤学编程之JAVA基础day04——流程结构

    一.认识流程图 二.顺序结构 三.选择结构 四.循环结构 五.扩展&代码块的概念 一.认识流程图 二.顺序结构 体现在程序进入某个方法后,从上到下没有分支的顺序执行. 三.选择结构 1.if选 ...

  5. 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用

    一.JAVA的数据类型 1.变量      2.常量     3.基本数据类型     4.引用数据类型     5.数据类型转换 二.Scanner类的使用 1.作用      2.引入     3 ...

  6. 小汤学编程之JAVA番外篇——Properties工具类

    一.编写 通过Java基础的学习,我们了解了Properties这种文本格式,Java程序通过专门的API可以很方便的与之进行交互.但是我们每次对Properties进行写入或读取时都要创建I/O流来 ...

  7. 小汤学编程之JAVA基础day15——枚举、注解和Properties

    一.枚举 1.枚举的来由     2.枚举的作用     3.枚举的特点     4.扩展:switch里可以传入哪些类型的值 二.注解 1.作用     2.注解的种类     3.自定义注解    ...

  8. 小汤学编程之JAVA基础day14——xml和反射

    一.xml 1.简介     2.特点     3.使用步骤 二.Reflect反射 1.概念     2.理解Class类     3.反射的功能     4.两个案例 一.xml 1.简介 xml ...

  9. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

最新文章

  1. 转正答辩ppt_同心同行 乘风破浪 兴业装饰新员工转正考核圆满完成
  2. 区块链BaaS云服务(40) 泰岳FruitChain
  3. ASPxGridView EditFormLayout修改 TextBox文本长度
  4. Maven的pom报错的解决方法
  5. java学习(41):成员实例的定义和访问续
  6. (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机
  7. 数据库高级知识——mysql架构介绍(一)
  8. JVM 内存设置大小
  9. 文本主题发现(一)-- 数据预处理
  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类...
  11. linux后台进程管理工具supervisor
  12. C++自带排序函数sort( )
  13. 好架构师都是写代码写出来的
  14. 关于STM32L476位带操作的说明
  15. uniapp实现复制功能
  16. 记:css绘制小猪佩奇的项目及踩过的坑
  17. 电力电子技术总结-电力电子器件2
  18. 咖啡再热闹,也逃不出巨头的手掌心
  19. MySQL错误–超出了“ max_questions”资源(当前值:1000)
  20. F2FS文件系统工具编译及使用方法

热门文章

  1. 综合日语第一册第十四课
  2. ubuntu server 14.10 安装 nodejs
  3. 无限分级 层次输出 demo
  4. 【转】Android - 文件读写操作 总结
  5. 百度视觉技术部人脸检测方向招聘实习生~北京
  6. RefineDetLite:腾讯提出轻量级高精度目标检测网络
  7. OpenVSLAM:日本先进工业科技研究所新开源视觉SLAM框架
  8. oracle1007错误,【问题处理】偶遇ORA- 01075: you are currently logged on错误
  9. Python爬虫速度很慢?并发编程了解一下吧
  10. 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。