小汤学编程之JAVA经典例题——嵌套集合
题目:
有一个记事本,能记录周一到周天,每天做的所有事情和事情的次数,周而复始。小明在这个记事本上记录了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经典例题——嵌套集合相关推荐
- 小汤学编程之MySQL经典例题——表的创建与查询
题目: 会员类型表UserTypeInfo [系统管理员-管理会员 店主-卖家 普通会员-买家] 类型编号 typeId int 主键 自增长 类型名 typeName varchar(20) 不能为 ...
- 小汤学编程之JAVA基础day12——异常
一.什么是异常 1.程序错误类型 2.异常的分类 3.深入认识异常 二.异常的继承结构 三.常见的异常收集 四.虚拟机对异常的两种处理方式 1.捕获异常 2.声明和抛出异常 五 ...
- 小汤学编程之JAVA基础day05——数组
一.概念 1.什么是数组 2.为什么要用到数组 二.使用方法 1.声明并分配空间 2.赋值 3.处理数据 三.数组的各种应用 1.求数组中最大/最小值 2.数组反 ...
- 小汤学编程之JAVA基础day04——流程结构
一.认识流程图 二.顺序结构 三.选择结构 四.循环结构 五.扩展&代码块的概念 一.认识流程图 二.顺序结构 体现在程序进入某个方法后,从上到下没有分支的顺序执行. 三.选择结构 1.if选 ...
- 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
一.JAVA的数据类型 1.变量 2.常量 3.基本数据类型 4.引用数据类型 5.数据类型转换 二.Scanner类的使用 1.作用 2.引入 3 ...
- 小汤学编程之JAVA番外篇——Properties工具类
一.编写 通过Java基础的学习,我们了解了Properties这种文本格式,Java程序通过专门的API可以很方便的与之进行交互.但是我们每次对Properties进行写入或读取时都要创建I/O流来 ...
- 小汤学编程之JAVA基础day15——枚举、注解和Properties
一.枚举 1.枚举的来由 2.枚举的作用 3.枚举的特点 4.扩展:switch里可以传入哪些类型的值 二.注解 1.作用 2.注解的种类 3.自定义注解 ...
- 小汤学编程之JAVA基础day14——xml和反射
一.xml 1.简介 2.特点 3.使用步骤 二.Reflect反射 1.概念 2.理解Class类 3.反射的功能 4.两个案例 一.xml 1.简介 xml ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
最新文章
- 转正答辩ppt_同心同行 乘风破浪 兴业装饰新员工转正考核圆满完成
- 区块链BaaS云服务(40) 泰岳FruitChain
- ASPxGridView EditFormLayout修改 TextBox文本长度
- Maven的pom报错的解决方法
- java学习(41):成员实例的定义和访问续
- (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机
- 数据库高级知识——mysql架构介绍(一)
- JVM 内存设置大小
- 文本主题发现(一)-- 数据预处理
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类...
- linux后台进程管理工具supervisor
- C++自带排序函数sort( )
- 好架构师都是写代码写出来的
- 关于STM32L476位带操作的说明
- uniapp实现复制功能
- 记:css绘制小猪佩奇的项目及踩过的坑
- 电力电子技术总结-电力电子器件2
- 咖啡再热闹,也逃不出巨头的手掌心
- MySQL错误–超出了“ max_questions”资源(当前值:1000)
- F2FS文件系统工具编译及使用方法
热门文章
- 综合日语第一册第十四课
- ubuntu server 14.10 安装 nodejs
- 无限分级 层次输出 demo
- 【转】Android - 文件读写操作 总结
- 百度视觉技术部人脸检测方向招聘实习生~北京
- RefineDetLite:腾讯提出轻量级高精度目标检测网络
- OpenVSLAM:日本先进工业科技研究所新开源视觉SLAM框架
- oracle1007错误,【问题处理】偶遇ORA- 01075: you are currently logged on错误
- Python爬虫速度很慢?并发编程了解一下吧
- 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。