当前位置: 首页 > news >正文

【Kotlin】List、Set、Map简介

1 List

        Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。

1.1 创建 List

1.1.1 emptyList

var list = emptyList<String>() // 创建空List

1.1.2 List 构造函数

var list1 = List(3) { "abc" } // [abc, abc, abc]
var list2 = ArrayList<Int>()
var list3 = LinkedList<String>()

1.1.3 listOf

var list1: List<String> = listOf() // 只读List
var list2: MutableList<String> = mutableListOf() // ArrayList
var list3: List<String> = listOf("zhang", "li", "wang")
var list4: MutableList<String> = mutableListOf("zhang", "li", "wang")
var list5 = listOfNotNull(true, 5, 3f, "abc", null)

        说明:listof 和 listOfNotNull 生成的列表是只读列表,不能修改。

1.1.4 根据 Array 创建 List

var arr = arrayOf(1, 2, 3)
var list1 = listOf(arr)
var list2 = listOfNotNull(arr)

1.2 增删改查

1.2.1 增加元素

fun main() {var list = mutableListOf<String>()list.add("abc")list.add("xyz")list.add(1, "ABC")list += "XYZ"list += arrayOf("123")list += listOf("456")list += setOf("789")
}

1.2.2 删除元素

fun main() {var list = mutableListOf("abc", "efg", "xyz")list.remove("abc")list.removeAt(0)list -= "xyz"list -= arrayOf("123")list -= listOf("456")list -= setOf("789")list.clear()
}

1.2.3 修改元素

var list = mutableListOf("abc", "efg", "xyz")
list[0] = "ABC"

1.2.4 访问元素

        1)访问元素

fun main() {var list = mutableListOf("zhan", "li", "wang")println(list[1]) // 打印: lilist[0] = "chen"list.any() // true, 判断List是否为空(容量为0)list.first() // chen, 获取首个元素list.last() // wang, 获取最后一个元素list.indexOf("wang") // 2, 查找元素对应的索引list.binarySearch("wang") // 2, 二分查找元素对应的索引
}

        2)遍历元素

fun main() {var list = mutableListOf("abc", "efg", "xyz")list.forEach(::println) // abc, efg, xyzfor ((index, item) in list.withIndex()) {println("[$index, $item]") // [0, abc], [1, efg], [2, xyz]}
}

1.3 修改元素顺序

1.3.1 翻转元素

fun main() {var list1 = mutableListOf(1, 2, 3, 4, 5)var list2 = list1.reversed() // 翻转List元素顺序, 并生成新的Listlist1.reverse() // 在原List上翻转数组元素顺序
}

1.3.2 打乱元素顺序

fun main() {var list1 = mutableListOf(1, 2, 3, 4, 5)var list2 = list1.shuffled() // 打乱List元素顺序, 并生成新的Listlist1.shuffle() // 打乱List元素顺序
}

1.3.3 元素排序

fun main() {var list1 = mutableListOf(3, 1, 5, 2, 4)var list2 = list1.sorted() // 从小到大排序, 并生成新的Listlist1.sort() // 从小到大排序var list3 = list1.sortedDescending() // 从大到小排序, 并生成新的Listlist1.sortDescending() // 从大到小排序
}

1.4 拼接列表元素

fun main() {var list = listOf("aa", "bb", "cc")var str1 = list.joinToString()println(str1) // 打印: aa, bb, ccvar str2 = list.joinToString("-", "[", "]")println(str2) // 打印: [aa-bb-cc]var str3 = list.joinToString(limit = 2, truncated = "***")println(str3) // 打印: aa, bb, ***var str4 = list.joinToString("/") {(it + it)}println(str4) // 打印: aaaa/bbbb/cccc
}

1.5 切片

fun main() {var list1 = listOf("AA", "BBB", "CC", "DDD")var list2 = list1.slice(1..2) // [BBB, CC], 截取1,2元素var list3 = list1.take(2) // [AA, BBB], 截取前2个元素var list4 = list1.takeLast(2) // [CC, DDD], 截取最后2个元素var list5 = list1.drop(2) // [CC, DDD], 截取第2个元素后面的元素var list6 = list1.dropLast(2) // [AA, BBB], 截取倒数第2个元素前面的元素
}

1.6 统计函数

fun main() {var list = mutableListOf(1, 2, 3)list.sum() // 6list.average() // 2.0list.max() // 3list.min() // 1list.count() // 3
}

1.7 集合运算

fun main() {var list1 = listOf("AAA", "BBB")var list2 = listOf("BBB", "CCC")println(list1 + list2) // [AAA, BBB, BBB, CCC]println(list1 - list2) // [AAA]println(list1 union list2) // [AAA, BBB, CCC]println(list1 intersect list2) // [BBB]println(list1 subtract list2) // [AAA]println(list2 subtract list1) // [CCC]println((list1 - list2) union (list2 - list1)) // [AAA, CCC]
}

1.8 map

1.8.1 map

fun main() {var list1 = listOf(5, 6, 7)var list2 = list1.map { it * it } // [25, 36, 49]
}

1.8.2 mapIndexed

fun main() {var list1 = listOf(5, 6, 7)var list2 = list1.mapIndexed { index, value ->"[$index, $value]" // [[0, 5], [1, 6], [2, 7]]}
}

1.9 groupBy

fun main() {var list = listOf("AA", "BBB", "CC", "DDD")// {2=[AA, CC], 3=[BBB, DDD]}var map: Map<Int, List<String>> = list.groupBy { it.length }
}

1.10 zip

1.10.1 zip

fun main() {var list1 = listOf(1, 2, 3)var list2 = listOf("AAA", "BBB", "CCC")// [(1, AAA), (2, BBB), (3, CCC)]var pairs: List<Pair<Int, String>> = list1.zip(list2)
}

1.10.2 unzip

fun main() {// [(1, AAA), (2, BBB), (3, CCC)]var pairList: List<Pair<Int, String>> = listOf(1 to "AAA",2 to "BBB",3 to "CCC")// ([1, 2, 3], [AAA, BBB, CCC])var listPair: Pair<List<Int>, List<String>> = pairList.unzip()
}

1.11 associate

fun main() {var list = listOf("AAA", "BBBBB", "CCCC")// {AAA=3, BBBBB=5, CCCC=4}var map1: Map<String, Int> = list.associateWith { it.length }// {3=AAA, 5=BBBBB, 4=CCCC}var map2: Map<Int, String> = list.associateBy { it.length }// {3=AAA, 5=BBBBB, 4=CCCC}var map3: Map<String, Int> = list.associate { it to it.length }
}

1.12 flatten

1.12.1 flatten

fun main() {var list = listOf(listOf("AA", "BB"), listOf("CC", "DD"))var flatten: List<String> = list.flatten() // [AA, BB, CC, DD]
}

1.12.2 flatMap

fun main() {var list = listOf(Container(listOf("AA")), Container(listOf("BB")))var flatten: List<String> = list.flatMap { it.list } // [AA, BB]
}class Container(var list: List<String>)

1.13 chunked

fun main() {var list1 = listOf("AA", "BBB", "CC", "DDD", "E", "FF", "GGG")var list2 = list1.chunked(3) // [[AA, BBB, CC], [DDD, E, FF], [GGG]]
}

2 Set

2.1 创建 Set

2.1.1 emptySet

var set = emptySet<String>()

2.1.2 Set 构造函数

var set1 = HashSet<Int>()
var set2 = LinkedHashSet<String>()
var set3 = TreeSet<String>()

2.1.3 setOf

var set1: Set<String> = setOf() // 只读Set
var set2: MutableSet<String> = mutableSetOf() // LinkedHashSet
var set3: HashSet<String> = hashSetOf() // HashSet
var set4: LinkedHashSet<String> = linkedSetOf() // LinkedHashSet
var set5: TreeSet<String> = sortedSetOf() // TreeSet
var set6: Set<String> = setOf("zhang", "li", "wang")
var set7: MutableSet<String> = mutableSetOf("zhang", "li", "wang")
var set8 = setOfNotNull(true, 5, 3f, "abc", null)

2.1.4 根据 Array 创建 Set

var arr = arrayOf(1, 2, 3)
var set1 = setOf(arr)
var set2 = setOfNotNull(arr)

2.2 增删改查

2.2.1 增加元素

fun main() {var set = mutableSetOf<String>()set.add("abc")set.add("xyz")set += "ABC"set += arrayOf("123")set += listOf("456")set += setOf("789")
}

2.2.2 删除元素

fun main() {var set = mutableListOf("abc", "efg", "xyz")set.remove("abc")set.removeAt(0)set -= "xyz"set -= arrayOf("123")set -= listOf("456")set -= setOf("789")set.clear()
}

2.2.3 访问元素

        1)访问元素

fun main() {var set = mutableSetOf("zhan", "li", "wang")println(set.elementAt(1)) // 打印: liset.any() // true, 判断List是否为空(容量为0)set.first() // chen, 获取首个元素set.last() // wang, 获取最后一个元素set.indexOf("wang") // 2, 查找元素对应的索引
}

        2)遍历元素

fun main() {var set = mutableSetOf("abc", "efg", "xyz")set.forEach(::println) // abc, efg, xyzfor ((index, item) in set.withIndex()) {println("[$index, $item]") // [0, abc], [1, efg], [2, xyz]}
}

2.3 修改元素顺序

2.3.1 翻转元素

fun main() {var set = mutableSetOf(1, 2, 3, 4, 5)var list = set.reversed() // 翻转Set元素顺序, 并生成新的List
}

2.3.2 打乱元素顺序

fun main() {var set = mutableSetOf(1, 2, 3, 4, 5)var list = set.shuffled() // 打乱Set元素顺序, 并生成新的List
}

2.3.3 元素排序

fun main() {var set = mutableSetOf(3, 1, 5, 2, 4)var list1 = set.sorted() // 从小到大排序, 并生成新的Listvar list2 = set.sortedDescending() // 从大到小排序, 并生成新的List
}

2.4 统计函数

fun main() {var set = mutableSetOf(1, 2, 3)set.sum() // 6set.average() // 2.0set.max() // 3set.min() // 1set.count() // 3
}

2.5 集合运算

fun main() {var set1 = setOf("AAA", "BBB")var set2 = setOf("BBB", "CCC")println(set1 + set2) // [AAA, BBB, BBB, CCC]println(set1 - set2) // [AAA]println(set1 union set2) // [AAA, BBB, CCC]println(set1 intersect set2) // [BBB]println(set1 subtract set2) // [AAA]println(set2 subtract set1) // [CCC]println((set1 - set2) union (set2 - set1)) // [AAA, CCC]
}

3 Map

3.1 创建 Map

3.1.1 Pair

        1)Pair 构造函数

public data class Pair<out A, out B>(public val first: A,public val second: B
) : Serializable

        2)to 函数

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

        3)应用

var pair: Pair<Int, String> = 1001 to "Tom"

3.1.2 emptyMap

var map = emptyMap<Int, String>()

3.1.3 Map 构造函数

var map1 = HashMap<Int, String>()
var map2 = Hashtable<Int, String>()
var map3 = LinkedHashMap<Int, String>()
var map4 = ConcurrentHashMap<Int, String>()
var map5 = TreeMap<Int, String>()

3.1.4 mapOf

var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)

3.2 增删改查

3.2.1 增加元素

        1)put

fun main() {var map: MutableMap<Int, String> = mutableMapOf()map.put(1001, "Tom")
}

        2)map[key] = value

fun main() {var map: MutableMap<Int, String> = mutableMapOf()map[1002] = "Mary"
}

        2)+

fun main() {var map: MutableMap<Int, String> = mutableMapOf()map += 1001 to "John"map += arrayOf(1002 to "Zhang")map += listOf(1003 to "Wang")map += setOf(1004 to "Li")map += mapOf(1005 to "Xie")
}

         4)putAll

fun main() {var map: MutableMap<Int, String> = mutableMapOf()var list1 = listOf(1, 2, 3)var list2 = listOf("zhang", "li", "wang")map.putAll(list1.zip(list2))
}

3.2.2 删除元素

fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")map.remove(1001)map -= 1002map -= arrayOf(1003)map -= listOf(1004)map -= setOf(1005)map.clear()
}

3.2.3 修改元素

var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)
map[1001] = "John"

3.2.4 访问元素

        1)访问元素

var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary"
)
println(map[1001]) // Tom

        2)遍历元素

fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")map.forEach { key, value ->println("[$key, $value]") // [1001, Tom], [1002, Mary]}for ((key, value) in map) {println("[$key, $value]") // [1001, Tom], [1002, Mary]}
}

3.3 keys 和 values

3.3.1 keys、values、entries

fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")println(map.keys) // [1001, 1002]println(map.values) // [Tom, Mary]for (entry in map.entries) {println("[${entry.key}, ${entry.value}]") // [1001, Tom], [1002, Mary]}println(map.containsKey(1001)) // trueprintln(map.containsValue("Tom")) // true
}

3.3.2 mapKeys、mapValues

fun main() {var map1: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")var map2 = map1.mapKeys { it.key - 1000 } // {1=Tom, 2=Mary}var map3 = map1.mapValues { it.value + "X" } // {1001=TomX, 1002=MaryX}
}

3.4 getOrDefault、getOrElse、getOrPut

fun main() {var map: MutableMap<Int, String> = mutableMapOf(1001 to "Tom",1002 to "Mary")// 在没有结果时返回给定的默认值var name1 = map.getOrDefault(1001, "xxx")// 使用函数式返回默认值var name2 = map.getOrElse(1001) { "xxx" }// 添加(1003, John), 并返回Johnvar name3 = map.getOrPut(1003) { "John" }
}

相关文章:

【Kotlin】List、Set、Map简介

1 List Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。 1.1 创建 List 1.1.1 emptyList var list emptyList<String>() // 创建空List 1.1.2 List 构造函数 var list1 List(3) { "abc" } // [abc, abc, abc] var list2 ArrayList<In…...

OpenCV 形态学处理函数

四、形态学处理&#xff08;膨胀&#xff0c;腐蚀&#xff0c;开闭运算&#xff09;_getstructuringelement()函数作用-CSDN博客 数字图像处理(c opencv)&#xff1a;形态学图像处理-morphologyEx函数实现腐蚀膨胀、开闭运算、击中-击不中变换、形态学梯度、顶帽黑帽变换 - 知乎…...

互联网摸鱼日报(2024-03-27)

互联网摸鱼日报(2024-03-27) 36氪新闻 谈“肉”色变&#xff0c;预制菜“顶流”要完&#xff1f; 欧美监管机构出重拳&#xff0c;苹果和谷歌都要被拆分了吗&#xff1f; 为什么产品经理的薪资待遇&#xff0c;这么高&#xff1f; AI PC&#xff1a;一场浩荡的革命 二氧化…...

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…...

C++基本语法

C是如何工作的 文章目录 C是如何工作的1、新建Hello World工程1.1使用Visual Studio新建项目1.2 HelloWorld1.2.1 命名空间1.2.2 输出输出 1.3 注释1.4 函数1.4.1 使用有返回的函数1.4.2 自定义函数 1、新建Hello World工程 1.1使用Visual Studio新建项目 按照下面的图片&…...

Node Sass does not yet support your current environment

项目运行时报错&#xff1a;Node Sass does not yet support your current environment 原因是node版本过高。 解决办法&#xff1a; 使用nvm管理node版本&#xff0c;&#xff08;如何安装nvm&#xff1f;请点击跳转&#xff09; 具体步骤如下&#xff1a; 1.查看当前node…...

长陆工业自动控制系统邀您到场参观2024第13届生物发酵产品与技术装备展

参展企业介绍 珠海市长陆工业自动控制系统股份有限公司于2004年在素有“百岛之市&#xff0c;浪漫之城”的珠江口西岸核心城市—珠海成立。长陆工业是流程工业智能制造自动化、信息化综合解决方案的提供者。产品遍及冶金、化工、建材、食品、石油、橡塑、能源、环保、物流、粮…...

数据仓库——维度表更新

维度表的更新 维度表修改规律: 绝大部分维度表都是不变的很多维度虽然会变化&#xff0c;但是变化的很缓慢源记录产品键不会改变产品描述及其他属性的改变都很缓慢在源OLTP 系统中&#xff0c;新的值会覆盖旧的值在数据仓库中&#xff0c;覆盖维度表的属性并不总是适当的做法…...

Web3创作整理 - 2024-02-23 ~ 2024-03-25

Web3 创作整理 - 2024-02-23 ~ 2024-03-25 整理下3月份的文章&#xff0c;方便大家阅读 分类文章地址&#x1fad1;ETH什么是Dapp&#x1f3bc;ETH什么是以太坊&#x1f3b5;ETH如何才能拥有ETH&#x1f3b6;ETHBTC网络 vs ETH网络&#x1f399;️ETHETH网络中的区块链&#x1…...

CSS(一)---【CSS简介、导入方式、八种选择器、优先级】

零.前言 本系列适用于零基础小白&#xff0c;亦或是初级前端工程师提升使用。 知识点较为详细&#xff0c;如果追求非常详细&#xff0c;请移步官方网站或搬运网站。 1.CSS简介 CSS全称&#xff1a;“Cascading Style Sheets”&#xff0c;中文名&#xff1a;“层叠样式表”…...

智慧公厕解决方案打造更加智能的卫生空间

一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题&#xff0c;包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战&#xff0c;智慧公厕提供了一套综合解决方案&#xff0c;包括智能导航、环境监测、资源管理等功能&a…...

美团0316春招笔试题

下面是美团2024-03-16笔试真题&#xff0c;进行了VP&#xff0c;由于未参与评测&#xff0c;故不保证正确性&#xff0c;仅供参考。 第一题 小美点外卖 求和然后减去满减和红包即可。 #include <bits/stdc.h> using namespace std; using LL long long ; int n, t, x,…...

typescript 实现RabbitMQ死信队列和延迟队列 订单10分钟未付归还库存

Manjaro安装RabbitMQ 安装 sudo pacman -S rabbitmq rabbitmqadmin启动管理模块 sudo rabbitmq-plugins enable rabbitmq_managementsudo rabbitmq-server管理界面 http://127.0.0.1:15672/ 默认用户名和密码都是guest。 要使用 rabbitmqctl 命令添加用户并分配权限&#xf…...

怎样才能把重建大师的空三导进去CC?

导出空三文件xml两者都是通用的&#xff0c;cc和photoscan都可以兼容。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;可一键…...

命令模式(请求与具体实现解耦)

目录 前言 UML plantuml 类图 实战代码 模板 Command Invoker Receiver Client 前言 命令模式解耦了命令请求者&#xff08;Invoker&#xff09;和命令执行者&#xff08;receiver&#xff09;&#xff0c;使得 Invoker 不再直接引用 receiver&#xff0c;而是依赖于…...

开发一款MMOARPG难度到底有多大

开发一款MMOARPG难度到底有多大 MMORPG游戏开发到底有多难&#xff0c;我们按照过去开发的标准&#xff0c;就比如开发一款传奇&#xff0c;那时候哪会用什么别人的引擎&#xff0c;都是自研&#xff0c;从基础图形API开始。我们不考虑美术和策划&#xff0c;就单指程序&#x…...

RTSP应用:实现视频流的实时推送

在实现实时视频流推送的项目中&#xff0c;RTSP&#xff08;Real Time Streaming Protocol&#xff09;协议扮演着核心角色。本文将指导你通过安装FFmpeg软件&#xff0c;下载并编译live555&#xff0c;以及配置ffmpeg进行视频流推送&#xff0c;来实现一个基本的RTSP流媒体服务…...

Java八股文(数据结构)

Java八股文の数据结构 数据结构 数据结构 请解释以下数据结构的概念&#xff1a;链表、栈、队列和树。 链表是一种线性数据结构&#xff0c;由节点组成&#xff0c;每个节点包含了指向下一个节点的指针&#xff1b; 栈是一种后进先出&#xff08;LIFO&#xff09;的数据结构&a…...

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理&#xff0c;它完全符合 Java Message Service (JMS) 2.0 规范&#xff0c;并支持多种通信协议&#xff0c;包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…...

QGIS插件系列--WhiteBox Tools

WhiteBox Tools&#xff08;官网机翻&#xff09;: WhiteboxTools是由圭尔夫大学地貌测量和水文地理信息学研究小组&#xff08;GHRG&#xff09;开发的高级地理空间软件包和数据分析平台。该项目始于2017年<>月&#xff0c;并在分析能力方面迅速发展。WhiteboxTools的一…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...

6.9本日总结

一、英语 复习默写list11list18&#xff0c;订正07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语&#xff1a;复习l默写sit12list17&#…...