集合嵌套,Collections,斗地主案例,日志框架
文章目录
- 集合嵌套
- List嵌套List
- List嵌套Map
- Map嵌套Map
- Collections类
- 方法
- 排序 sort
- 乱序 shuffle
- 斗地主案例
- 需求
- 思路
- 代码
- 日志框架
- 介绍
- 优势
- 体系结构
- Logback
- 概述
- 快速入门
- 配置详解
集合嵌套
List嵌套List
public static void main(String[] args){//一个年级有许多班级,每个班级有许多学生,学生有姓名//定义班级List<String> classes1List = new ArrayList<>();classes1List.add("zhangsan");classes1List.add("lisi");classes1List.add("wangwu");List<String> classes2List = new ArrayList<>();classes2List.add("zhangsan2");classes2List.add("lisi2");classes2List.add("wangwu2");List<String> classes3List = new ArrayList<>();classes3List.add("zhangsan3");classes3List.add("lisi3");classes3List.add("wangwu3");//定义年级List<List<String>> gradeList = new ArrayList<>();gradeList.add(classes1List);gradeList.add(classes2List);gradeList.add(classes3List);//遍历gradeListfor (List<String> classes : gradeList) {for (int i = 0; i < classes.size(); i++) {System.out.println(classes.get(i));}System.out.println("--------------------");}}
List嵌套Map
public static void main(String[] args) {//先定义班级Map<String,String> classes1Map = new HashMap<>();classes1Map.put("001","zhangsan");classes1Map.put("002","lisi");classes1Map.put("003","wangwu");Map<String,String> classes2Map = new HashMap<>();classes2Map.put("001","zhangsan2");classes2Map.put("002","lisi2");classes2Map.put("003","wangwu2");Map<String,String> classes3Map = new HashMap<>();classes3Map.put("001","zhangsan3");classes3Map.put("002","lisi3");classes3Map.put("003","wangwu3");//定义年级List<Map<String,String>> gradeList = new ArrayList<>();gradeList.add(classes1Map);gradeList.add(classes2Map);gradeList.add(classes3Map);//遍历for (Map<String, String> classes : gradeList) {for (Map.Entry<String, String> entry : classes.entrySet()) {String id = entry.getKey();String name = entry.getValue();System.out.println(id + "--" + name);}System.out.println("------------------");}
}
Map嵌套Map
public static void main(String[] args) {//先定义班级Map<String,String> classes1Map = new HashMap<>();classes1Map.put("001","zhangsan");classes1Map.put("002","lisi");classes1Map.put("003","wangwu");Map<String,String> classes2Map = new HashMap<>();classes2Map.put("001","zhangsan2");classes2Map.put("002","lisi2");classes2Map.put("003","wangwu2");Map<String,String> classes3Map = new HashMap<>();classes3Map.put("001","zhangsan3");classes3Map.put("002","lisi3");classes3Map.put("003","wangwu3");//再定义年级Map<String,Map<String,String>> gradeMap = new HashMap<>();gradeMap.put("第一个班级",classes1Map);gradeMap.put("第二个班级",classes2Map);gradeMap.put("第三个班级",classes3Map);//遍历for (String s : gradeMap.keySet()) {System.out.println("--------------");for (Map.Entry<String, String> entry : gradeMap.get(s).entrySet()) {String id = entry.getKey();String name = entry.getValue();System.out.println(s + ":" + id + "--" + name);}}}
Collections类
方法
排序 sort

乱序 shuffle

斗地主案例
需求

思路
- 准备牌
- 完成数字和纸牌的映射,使用Map集合
- 利用list集合记录牌的编号
- 洗牌:利用Collections.shuffle方法对其洗牌
- 发牌:将牌的编号对3取余,剩下3张作为底牌
- 利用TreeSet集合保存三个人的拍编号
- 看牌,通过TreeSet集合中牌的编号利用Map集合查看牌
代码
public static void main(String[] args) {//准备牌Map<Integer, String> pokerMap = new HashMap<>();List<Integer> pokerNum = new ArrayList<>();preparePoker(pokerMap, pokerNum);//洗牌Collections.shuffle(pokerNum);//System.out.println(pokerNum);//发牌TreeSet<Integer> player1 = takePoker(pokerNum,1);TreeSet<Integer> player2 = takePoker(pokerNum,2);TreeSet<Integer> player3 = takePoker(pokerNum,3);TreeSet<Integer> dp = takePoker(pokerNum,0);// System.out.println(player1);
// System.out.println(player2);
// System.out.println(player3);
// System.out.println(dp);//看牌lookPoker("zhangsan", player1, pokerMap);lookPoker("lisi", player2, pokerMap);lookPoker("wangwu", player3, pokerMap);lookPoker("底牌", dp, pokerMap);}//准备牌public static void preparePoker(Map<Integer, String> pokerMap, List<Integer> pokerNum) {String[] colors = {"♠", "♥", "♣", "♦"};String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};int index = 0;pokerMap.put(index, "大王");pokerNum.add(index);index++;pokerMap.put(index, "小王");pokerNum.add(index);index++;for (int i = 0; i < numbers.length; i++) {for (int j = 0; j < colors.length; j++) {pokerMap.put(index, colors[j] + numbers[i]);pokerNum.add(index);index++;}}//System.out.println(pokerMap);}//发牌public static TreeSet<Integer> takePoker(List<Integer> pokerNum,Integer id) {TreeSet<Integer> player1 = new TreeSet<>();TreeSet<Integer> player2 = new TreeSet<>();TreeSet<Integer> player3 = new TreeSet<>();TreeSet<Integer> dp = new TreeSet<>();//底牌for (int i = 0; i < pokerNum.size(); i++) {if (i > pokerNum.size() - 4) {dp.add(pokerNum.get(i));} else if (i % 3 == 0) {player1.add(pokerNum.get(i));} else if (i % 3 == 1) {player2.add(pokerNum.get(i));} else if (i % 3 == 2) {player3.add(pokerNum.get(i));}}if (id == 0){return dp;} else if (id == 1) {return player1;}else if (id == 2){return player2;} else if (id == 3) {return player3;}return new TreeSet<>();}//看牌public static void lookPoker(String name, TreeSet<Integer> player, Map<Integer, String> pokerMap) {System.out.println(name + "的牌是:");for (Integer pokerNum : player) {String poker = pokerMap.get(pokerNum);System.out.print(poker + " ");}System.out.println();}
日志框架
介绍
程序中的日志可以用来记录程序中运行过程中的信息,并可以进行永久存储
优势
- 可以将系统执行的信息选择性的记录到指定的位置(控制台,文件,数据库中)
- 可以随时以开关的形式控制是否记录日志,无需修改源代码
体系结构

Logback
概述

快速入门

配置详解


相关文章:
集合嵌套,Collections,斗地主案例,日志框架
文章目录 集合嵌套List嵌套ListList嵌套MapMap嵌套Map Collections类方法排序 sort 乱序 shuffle 斗地主案例需求思路代码 日志框架介绍优势体系结构Logback概述快速入门配置详解 集合嵌套 List嵌套List public static void main(String[] args){//一个年级有许多班级…...
maven pom relativePath属性的作用
maven pom relativePath属性的作用 文章目录 maven pom relativePath属性的作用一、relativePath出现的地方二、relativePath默认值三、四、<relativePath>一个pom路径 一、relativePath出现的地方 搭建maven项目,子模块指定父模块试,经常会在par…...
【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】
1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…...
Nginx入门--初识Nginx的架构
一、概述 Nginx的架构设计旨在高效处理并发的网络请求。它采用了事件驱动的、非阻塞的IO模型,可以同时处理成千上万个并发连接,而不会消耗太多的系统资源。 二、主要组件 Nginx的主要组件包括: Master Process(主进程…...
网络性能提升10%,ZStack Edge 云原生超融合基于第四代英特尔®至强®可扩展处理器解决方案发布
随着业务模式的逐渐转变、业务架构逐渐变得复杂,同时容器技术的兴起和逐渐成熟,使得Kubernetes、微服务等新潮技术逐步应用于业务应用系统上。 为了充分释放性能、为业务系统提供更高效的运行环境,ZStack Edge 云原生超融合采用了第四代英特尔…...
双非计算机考研目标211,选11408还是22408更稳?
求稳得话,11408比22408要稳! 很多同学只知道,11408和22408在考察的科目上有区别,比如: 11408考的是考研数学一和英语一,22408考察的是考研数学二和英语二: 考研数学一和考研数学二的区别大吗…...
简单了解策略模式
什么是策略模式? 策略模式提供生成某一种产品的不同方式 Strategy策略类定义了某个各种算法的公共方法,不同的算法类通过继承Strategy策略类,实现自己的算法 Context的作用是减少客户端和Strategy策略类之间的耦合,客户端只需要…...
算法——运动模型
智能驾驶中常用的速度计算算法包括基于GPS的速度计算、惯性测量单元(IMU)的速度计算、雷达测距的速度计算、视觉测距的速度计算等。这些算法可以单独使用或者结合使用,以提高速度计算的准确性和稳定性。 智能驾驶中常用的加速度计算算法包括…...
基于R语言lavaan结构方程模型(SEM)技术应用
结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、…...
本地虚拟机服务器修改站点根目录并使用域名访问的简单示例
说明:本文提及效果是使用vmware虚拟机,镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用: vim /etc/httpd/conf.d/webpage.conf 因为在主配…...
生信数据分析——GO+KEGG富集分析
生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析(Rstudio)3. KEGG富集分析(Rstudio) 1. 富集分析基础知识 1.1 为什么要做功能富集分析? 转录组学数据得到的基…...
微服务(基础篇-007-RabbitMQ)
目录 初识MQ(1) 同步通讯(1.1) 异步通讯(1.2) MQ常见框架(1.3) RabbitMQ快速入门(2) RabbitMQ概述和安装(2.1) 常见消息模型(2.2) 快速入门ÿ…...
汇总:五个开源的Three.js项目
Three.js 是一个基于 WebGL 的 JavaScript 库,它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性,Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…...
JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】
一.JavaScript介绍 1.1什么是JavaScript JavaScript简称“js”,js与java没有任何关系。 js是一种“轻量级、解释型、面向对象的脚本语言”。 二.JavaScript的两种导入方式 2.1内联式 在HTML文档中使用<script>标签直接引用。 <script>console.log…...
部署云原生边缘计算平台kubeedge
文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发,实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…...
Java设计模式:单例模式详解
设计模式:单例详解 文章目录 设计模式:单例详解一、单例模式的原理二、单例模式的实现推荐1、饿汉模式2、静态内部类 三、单例模式的案例四、单例模式的使用场景推荐总结 一、单例模式的原理 单例模式听起来很高大上,但其实它的核心思想很简…...
Qt5.14.2 定时器黑魔法,一键唤醒延时任务
在图形界面程序的世界里,有这么一个需求无处不在:在特定的时间间隔后,执行一段特殊的代码。比如说30秒后自动保存文档、500毫秒后更新UI界面等等。作为资深Qt程序员,我相信各位一定也曾为实现这种"延时任务"而绞尽脑汁。今天&#…...
C++项目——集群聊天服务器项目(九)客户端异常退出业务
服务器端应检测到客户端是否异常退出,因此本节来实现客户端异常退出,项目流程见后文 一、客户端异常退出业务流程 (1)在业务模块定义处理客户端异常退出的函数 (2)集群聊天服务器项目(八)提到…...
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信
STM32CubeIDE基础学习-HC05蓝牙模块和手机通信 文章目录 STM32CubeIDE基础学习-HC05蓝牙模块和手机通信前言第1章 硬件连接第2章 工程配置第3章 代码编写3.1 手机指令控制LED 第4章 实验现象总结 前言 前面的文章学习了串口通过轮询和中断的简单使用方法,现在就来用…...
npm mongoose包下载冲突解决之道
我在新电脑下载完项目代码后,运行 npm install --registryhttps://registry.npm.taobao.org 1运行就报错: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: lowcode-form-backend1.0.0 npm …...
Phi-4-Reasoning-Vision应用场景:法律文书配图证据链推理系统
Phi-4-Reasoning-Vision应用场景:法律文书配图证据链推理系统 1. 法律文书配图证据链推理系统概述 在法律实务中,证据链的构建往往需要处理大量图文混合材料。传统人工分析方式存在效率低下、主观性强、容易遗漏细节等问题。基于Phi-4-Reasoning-Visio…...
用MATLAB从零实现六足机器人步态:交替三角与波动步态代码详解
用MATLAB从零实现六足机器人步态:交替三角与波动步态代码详解 六足机器人因其卓越的稳定性和地形适应能力,在野外勘探、灾难救援等领域展现出巨大潜力。而步态规划作为机器人运动控制的核心,直接决定了机器人的移动效率和稳定性。本文将带您从…...
OpenRGB:统一多品牌设备控制的开源RGB解决方案
OpenRGB:统一多品牌设备控制的开源RGB解决方案 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Releases can …...
GitHub中文界面终极指南:5分钟让你的GitHub说中文
GitHub中文界面终极指南:5分钟让你的GitHub说中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 想象一下,你…...
PLC新手必看:三菱FX2N顺序功能图的5个常见错误及解决方法
三菱FX2N顺序功能图实战避坑指南:从原理到调试的完整解决方案 第一次接触三菱FX2N的顺序功能图编程时,那种既兴奋又忐忑的心情至今记忆犹新。看着逻辑清晰的流程图在仿真中运行失常,或是设备突然"抽风"时的茫然,是每个P…...
智能文献管理全面指南:从学术研究痛点到高效解决方案
智能文献管理全面指南:从学术研究痛点到高效解决方案 【免费下载链接】zotero Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero …...
AI首推路径控制引擎
AI首推路径控制引擎版本:v2.0.0 发布日期:2026年3月26日 发布状态:正式全量发布---一、背景与概述在AI生成式应用中,模型输出的随机性与不可控性一直是业务落地的核心痛点。为解决“如何让AI严格遵循预设逻辑生成答案”的问题&…...
快马平台快速原型:十分钟用AI生成你的第一个龙虾养殖系统Docker部署方案
最近在研究如何用Docker快速搭建一个龙虾养殖模拟系统,发现用InsCode(快马)平台可以大大简化这个过程。作为一个快速原型验证工具,它让我在十分钟内就完成了从构思到部署的全流程。下面分享下我的实践心得: 项目构思阶段 这个模拟系统需要展示…...
Realistic Vision V5.1镜像部署实操:解决‘模型路径不存在’异常的完整排查链
Realistic Vision V5.1镜像部署实操:解决‘模型路径不存在’异常的完整排查链 1. 引言:从“模型路径不存在”说起 如果你在部署Realistic Vision V5.1虚拟摄影棚时,满怀期待地启动程序,结果却在控制台看到一行冰冷的“模型路径不…...
Linux 内核模块编程入门
Linux 内核模块编程入门 内核模块的重要性 作为科技创业者,我深刻理解内核模块在系统开发中的灵活性和强大功能。内核模块允许我们在不重新编译整个内核的情况下,动态地添加或移除功能。这种机制不仅加快了开发迭代速度,还为产品定制化提供了…...
