JavaSE进阶——Day07 集合嵌套、Collections工具类、日志框架
JavaSE进阶——Day07 该篇主要讲解Java中的集合嵌套、Collections工具类、日志框架
Map集合:(双列集合)
回顾
- 一次存储两个元素(key、value)
- key不能重复、value可以重复
- 一个key只能对应一个value
- 不能直接遍历(间接性遍历)
- 键找值:先获取Map集合中所有的key元素,遍历所有的key元素,在遍历过程中通过key找到value
- 键值对:先获取Map集合中所有的键值对对象(Map.Entry),遍历所有的键值对对象,在遍历过程中获取到key和value
案例
使用Map集合统计字符串中每个字符出现的次数
1 | package map.example; |
集合的嵌套
List嵌套List
使用场景举例:一年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,保存一个年级所有的班级信息
思路:
可以使用List集合保存一个班级的学生
可以使用List集合保存所有班级
因此我们可以定义集合如下:
班级:List
- 举例 :
List<String> 一班 = {迪丽热巴 , 古力娜扎 ,马尔扎哈 ,欧阳娜娜} List<String> 二班 = {李小璐 , 白百何 , 马蓉} List<String> 三班 = {林丹 ,文章, 陈赫}
- 举例 :
年级:List
- >
- 举例 :
List<List<String>> 年级 = {一班 , 二班 , 三班}
- 举例 :
代码:
1 | package nesting; |
List嵌套Map
/*
List嵌套Map :
使用场景举例:一年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,姓名有与之对应的学号,保存一年级所有的班级信息。
思路:
1 可以使用Map集合保存一个班级的学生(键是学号,值是名字)
2 可以使用List集合保存所有班级
因此我们可以定义集合如下:
班级:Map
举例 :
Map
Map
Map
年级:List
*/
代码:
1 | package nesting; |
Map嵌套Map
Map嵌套Map
使用场景举例:一个年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,姓名有与之对应的学号,保存一年级所有的班级信息,班级有与之对应的班级名称。
思路:
可以使用Map集合保存一个班级的学生(键是学号,值是名字)
可以使用Map集合保存所有班级(键是班级名称,值是班级集合信息)
因此我们可以定义集合如下:
班级:
Map<String,String> 键:学号,值:姓名
举例 :
Map<String,String> 一班 = {it001 = 迪丽热巴 , it002 = 古力娜扎,it003 = 马尔扎哈 ,it004 = 欧阳娜娜}
Map<String,String> 二班 = {it001 = 李小璐 , it002 = 白百何 ,it003 = 马蓉}
` Map<String,String> 三班 = {it001 = 林丹, it002 = 文章, it003 = 陈赫}`
年级:
Map<String , Map<String,String>> 键:班级名称,值:具体班级信息
举例:
`Map<String, Map<String,String>> 年级 = {"一班" = 一班 , "二班" = 二班 , "三班" = 三班 }`
代码:
1 | package nesting; |
嵌套集合梳理
- 嵌套for循环:
1 | for() |
可以应用于:二维数组遍历、嵌套集合遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14int[][] array = { {1,2,3}, {4,5} };
for(int i=0; i<array.length; i++)
{
//取出每一个元素(一维数组)
int[] arr = array[i];
//{1,2,3}
// {4,5}
for(int j=0; j<arr.length ;j++)
{
int num = arr[j];
}
}1
2
3
4
5
6
7list1[ list2[1,2,3] , list3[4,5] ]
//遍历:list1
//取出每一个元素:list2、list3
//遍历 : list2 、list3
Map同理
Collections工具类
工具类
Arrays工具类:是针对数组提供了一些功能(排序、转换为字符串)
Collections工具类: 是针对集合提供了一些功能(排序、二分查询、乱序、添加另一个集合)
Collections工具类
1 | //把给定的元素添加到指定的集合中 |
1 | Collections.sort( 集合 );//对集合中的元素进行排序(自然排序、比较器) |
斗地主案例
需求
按照斗地主的规则,完成洗牌发牌的动作。
要求完成以下功能:
准备牌:组装54张扑克牌
洗牌:54张牌顺序打乱
发牌:三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
看牌:查看三人各自手中的牌(按照牌的大小排序)、底牌
规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
逻辑代码
1 | package doudizhu; |
遇到问题
TreeSet
集合自带自然排序的功能未掌握
日志框架
日志技术的概述
- 常见的日志规范:
Commons Logging
Simple Logging Facade for Java(slf4j)
日志的实现框架:
Log4J
Logback(重点学习的,其他的都大同小异)
日志技术体系结构
Logback概述
Logback快速入门
补充
使用java语言开发完成的程序,要给其他人使用,怎么办呢?
- 把程序打包: xxxx.jar (jar文件是java文件压缩包)
要使用第三方开发好的程序,怎么办?
- 在自己的项目工程下,导入xxx.jar包
使用Logback的步骤:
- 导入Logback所需的相关jar文件,并添加到项目资源库中
- 在项目工程下新建
lib
文件夹,把logback需要的jar文件存放到该文件夹下 - lib目录下的存储的jar文件,添加到当前项目资源库中
- 在项目工程下新建
- 把logback核心配置文件,拷贝到当前项目的src目录下
- 在类中获取到Logger日志对象,使用日志对象中的API方法记录需要的操作信息
Logback日志框架的核心:logback.xml
- xml文件
Logback配置详解-输出位置、格式设置
Logback配置详解-日志级别设置
(略)
Logback日志级别(从大到小):
- error //错误
- warn //警告
- info //信息
- debug //调试
- trace //追踪(例:追踪用户行为轨迹)