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

《从0到1常用Map集合核心摘要 + 不深不浅底层核心》

《从0到1常用Map集合核心摘要+不深不浅底层核心》

在这里插入图片描述

前置知识

什么是键值对

​ 键值对是一种数据结构,是唯一标识,是对应数据,用来快速查找信息。例:

{"name": "Alice"},键是name,值是Alice

这听起来有些抽象, 为什么不能值就是数据呢? 还要多一个键

​ 实际上, 键可能只是一个用于 ‘描述/标识’ 值的信息, 它的值可能是一个对象, 或一 个数组, 甚至更多复杂的东西,

​ 但是无论有多复杂, 都可以通过一个 找到
​ 而你的键, 可能连 5 个字母都没有

补充:并且直接存储值时,每个值的含义会很模糊。键则提供信息,比如
name: "Alice" 更直观,而不是单独存 "Alice"

map 集合是干嘛用的?

​ map集合就是用来存储一组或多组键值对的, 为了方便我们使用键值对, 其中封装了很多 方法, 供我们操作键值对

所有Map集合的接口 “Map”

  • 一个接口, 其中包含的所有实现类都是 同一套数据结构(键值对)

介绍

  • Map 集合是一种双列集合, 每个元素包含两个数据, 一个是键一个是值

    • 特点

      • 键唯一 每个键唯一, 值可重复
      • 易查 通过键定位值, 提高访问效率及便利性
      • 灵活 通过泛型可存储各类数据, 无论是键或值
    • 每个元素的格式

      • key = value : 键值对

      • key (键) : 非重

      • value (值) : 可重

      • 关联性 : 键绑值, 哪怕不同键同值, 地址也不一样

      • 一键多值 : 结合使用双列集合和单列集合, 来完成一键多值

    • 键值对

      • 一个整体, 在 JAVA 中使用 Entry 对象来表示

      • 使用场景 :
        购物车 -> 选择商品 -> 结算 …

               *每个店铺对应一个商品,  有时候一个有时候多个,  每个商品使用一个商品封装成一个对象来进行维护,  多个商品应当使用多个商品对象的单列集合装起来,  这样一个结算订单就有了多个商品*
        
      • 总结 : 遇到键对值 (一个对多个), 就使用双列集合

常用公共方法、实现关系

V put(K key,V value) : // 添加键值对, 返回被覆盖的值 (没有覆盖则null)
V remove(Object key) : // 根据键删除键值对, 返回被删除的键对应的值boolean containsKey(Object key) : //判断集合指定键, 返回是或否
boolean containsValue(Object value) : //判断集合指定值, 返回是或否void Clear() : // 清空所有的键值对
boolean isEmpty() : //判断集合是否为空
int size() : //集合的长度 (键值对个数)

常用双列集合

TreeMap (红黑树)
HashMap (哈希表)
LinkedHashMap (哈希表 + 双向链表)

使用介绍

HashMap 的底层逻辑

  • put 方法 : 双列集合中的添加
    • put 方法执行中, 键和值会封装为一个 Entry(键值对) 对象
    • 但实际在计算应存入索引时, 是拿着键进行计算的, 和值没有关系
      (先调用对象计算原始哈希值, 再使用原始哈希值做一次哈希扰动, 然后再使用扰动过的哈希值做一次异或操作进行二次哈希, 最后再取余底层数组长度(16))…

方法演示

添加 : put(K key, V value)

/*  Map是接口, 接口不能直接用, 所以通过多态一个子类或实现类  */
Map<String, String> map = new HashMap<>(); // 对HashMap 进行操作
map.put("张三","北京"); //put: 添加一个键值对 一是键二是值
map.put("李四","北京"); // 键重复时警告, 右边重复则没事, 说明键的不可重, 值的可重
map.put("王五","北京");//  北京 -> 仅一个
//  张三, 李四, 王五 -> 对应多个
System.out.println(map);// 打印成乱序, 是因为底层是哈希表// **put方法的返回值 被替换掉的旧值
String str = map.put("lala", "北京");
String str2 = map.put("lala", "喵");
System.out.println(str);
// 返回被覆盖掉的旧值, 没有重复就直接存
System.out.println(str2);
// -- 该返回值一般不接收 --

put方法的细节 (修改)( 条件 : 如果出现重键, 保留新键替换旧键 )

删除 : remove(Object key)

/* Remove 根据键删除 */
Map<String,String> map = new HashMap<>();
map.put("张三","南宁");
map.put("李四","上海");
map.put("王五","南宁");
System.out.println(map);map.remove("张三");
System.out.println(map);//返回值
String accept = map.remove("王五");
System.out.println(accept); // 返回为被删除键对应的值 - > 南宁
  • 清空, 非空, 大小, 内容
  • clear()、IsEmpty()、Size()、2个Contain() 一个比键一个比值
Map<String,String> map = new HashMap<>();
map.put("牛","马");
map.put("羊","马");
map.put("猪","马");
map.put("屎","马");System.out.println(map);
/*  判断是否存在指定数据  */
System.out.println(map.containsKey("牛"));  ->  true
System.out.println(map.containsValue("王"));  - > false
System.out.println("-------------------------------------------");/*  清空,判断内容是否存在,判断非空 */
map.clear();
System.out.println(map);  ->  []
System.out.println(map.isEmpty());  ->  true
System.out.println(map.size());  ->  0

泛型为自定义类时

//    HashMap : 虽然说是键唯一,  但是底层依赖于哈希算法和内容比较
//    所以自定义类依然要重写 '两个哈希方法'
HashMap<Person,String> hm = new HashMap<>();
hm.put(new Person("张三",24),"上海");
hm.put(new Person("李四",23),"广东南宁");
hm.put(new Person("李四",23),"上海哈尔滨");
hm.put(new Person("王五",21),"上海");
hm.put(new Person("牛六",22),"上海");
System.out.println(hm);
// 没有重写两个哈希方法就会导致没有去重System.out.println(hm);
//HashMap底层也是哈希表结构,自定义类不重写 'hashCode和equal' 就无法去重, 而我们经常用的Bean类就重写过 这两个方法

排序 : 使用TreeMap集合

//TreeMap : 键排序
TreeMap<Person,String> hm = new TreeMap<>();
hm.put(new Person("张三",24),"上海");
hm.put(new Person("李四",23),"广东南宁");
hm.put(new Person("李四",23),"上海哈尔滨");
hm.put(new Person("王五",21),"上海");
hm.put(new Person("牛六",22),"上海");
System.out.println(hm);
//类型转换异常, 不能转换为 Java.lang.Comparable,
//如果键是自定义类(如 Person),没有实现 Comparable 接口,就无法比较两个键,导致报错:
// ClassCastException: Person cannot be cast to java.lang.Comparable。//总结 : 键排序 (实现Comparable接口, 重写comparable方法)

注意事项 : ** TreeMap 之所以可以在 HashCode 存储无序特性下进行排序, 实际上是因为他实现了Comparable 自然排序接口, 使用了 CompareTo 方法, 所以当我们使用 TreeMap指定泛型为自定义类时, 就需要重写 compareTo 方法**, 并且自定义类下要重写 hashCode() 和 equals(), 确保键的唯一性

LinkedHashMap 和 HashMap ↑一样的操作

// LinkedHashMap : 键唯一, 且可以保证存取顺序
LinkedHashMap<Person,String> hm = new LinkedHashMap<>();
hm.put(new Person("张三",23),"上海");
hm.put(new Person("李四",25),"南宁");
hm.put(new Person("王五",29),"此时");
System.out.println(hm);

下面统一讲

Map 集合中的三种遍历方式

  • 摘要

    1. 通过键找值
      V get(Object key) 根据键查找对应的值
      Set keySet() 获取 Map 集合中所有的值

      配合使用 : 通过 Set 拿到每一个键, 再通过get 拿到每一个值

    2. 通过键值对对象获取键和值

    3. 通过forEach遍历

  • 遍历方式演示

    • 第一种遍历 (keySet,get)
    | 第一种方式:  结合两种方法 |
    //V get(Object key) : 根据键找对应的值
    //Set<K> keSet() : 获取 Map 集合中所有的键HashMap<String,String> hs = new HashMap<>();
    hs.put("张三","北京");
    hs.put("李四","上海");
    hs.put("王五","牛牛");// 获取到所有的键
    Set<String> set = hs.keySet();
    System.out.println(hs);//遍历的set集合
    for(String key:set){ // 获取泛型为String类型的键//调用get方法String content = hs.get(key);//根据键拿对应的值System.out.println("键: "+key+" 值: "+content);
    }
    
    • 第二种遍历 (封装为Entry)
    // 第二种
    // 通过键值对对象获取键和值  Map.Entry(内部类)
    // 遍历要使用到的方法名 :
    // getKey() : 获取键
    // getValue() : 获取值
    // Set<Map.Entry<K,V>> entrySet() : 获取集合中所有的键值对对象 (接收getKey和getValue)
    // 配合使用, 获取键, 获取值, 根据键和值获取对象HashMap<String,String> hs = new HashMap<>();
    hs.put("张三","北京");
    hs.put("李四","上海");
    hs.put("王五","牛牛");// 1. 获取所有的键值对对象
    Set<Map.Entry<String,String>> entrySet = hs.entrySet();
    // 格式剖析 : Set接口指定泛型, Map 中的内部类 Entry 也要指定泛型,键和值都是String 没了// 2. 遍历set集合获取每一个键值对对象
    for(Map.Entry<String,String> keyV : entrySet){// 3. 通过键值对对象, 获取键和值System.out.println(keyV.getKey() + " | " + keyV.getValue());
    }/*总结 :1.调用 entrySet方法获取所有的键值对对象 (得到的是Set集合)2.遍历 Set 集合, 获取每一个键值对对象3. 通过键值对对象的 getKey() getValue() 获取键和值*/
    
    • 第三种遍历方式 (forEach)
    // Map 集合中的三种遍历方式
    // 通过foreach 方法便利
    /* default void forEach(BiConsumer<? super K,? super V> action)-- 遍历 Map 集合 ,获取键和值
    */
    HashMap<String,String> hs = new HashMap<>();
    hs.put("张三","北京");
    hs.put("李四","上海");
    hs.put("王五","牛牛");/*  一个函数式接口  */
    hs.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s1, String s2) {System.out.println(s1 + " | " + s2);}
    });
    

Map 集合练习

/*Map 集合练习 (单列集合结合双列集合)定义一个Map集合, 键用表示身份名称, 值表示市添加完毕后, 遍历结果:格式如下:江苏省 = 南京市, 扬州市, 苏州市, 无锡市, 常州市湖北省 = 武汉市, 孝感市, 十堰市, 宜昌市, 鄂州市四川省 = 成都市, 绵阳市, 自贡市, 攀枝花市, 泸州市*/
| 思路 : 单列集合做值, 双列集合做键 |ArrayList<String> list = new ArrayList<>();
HashMap<String,ArrayList<String>> map = new HashMap<>();
Collections.addAll(list,"南京市","扬州市","苏州市","无锡市","常州市");| 结合 |
map.put("江苏省",list);ArrayList<String> list2 = new ArrayList<>();
Collections.addAll(list2,"武汉市","孝感市","十堰市","宜昌市","鄂州市");
map.put("湖北省",list2);ArrayList<String> list3 = new ArrayList<>();
Collections.addAll(list3,"成都市","绵阳市","自贡市","攀枝花市","泸州市");
map.put("四川省",list3);map.forEach((k, v) -> System.out.println(k+" = "+v));
// 第二种遍历方式回温
System.out.println("-----------------------------------");| 封装为键值对对象 |
Set<Map.Entry<String, ArrayList<String>>> entries = map.entrySet();| 遍历 |
for (Map.Entry<String, ArrayList<String>> entry : entries) {System.out.println(entry.getKey() + " = " + entry.getValue());
}

有意思的底层

以下是对 Map 接口详解的进一步拓展,包含数据结构、底层实现和内存优化等方面的深入分析。


Map 的底层数据结构

HashMap 的底层结构
  1. 数组 + 链表 + 红黑树

    • HashMap 的底层是一个数组(哈希桶),每个桶存储一个链表或红黑树。
    • 当发生哈希冲突(即多个键映射到相同的桶时),HashMap 会将这些键值对组织成一个链表存储。
    • 如果链表长度超过一定阈值(默认 8),链表会被转换为红黑树,提升查找效率。
    • 如果桶内元素数量小于阈值(默认 6),红黑树会退化为链表。
  2. 哈希计算逻辑

    • 键的哈希值由 hashCode 方法计算,通过扰动函数进一步优化,使其分布更均匀。
    • 通过 (n - 1) & hash 确定哈希桶的索引(n 是数组长度)。
    • 这种位运算比取模操作更高效。
  3. 动态扩容

    • 当 HashMap 的元素数量超过数组容量的 75%(默认负载因子 0.75),数组会扩容为原大小的两倍,并重新计算所有键的哈希位置。
TreeMap 的底层结构
  1. 红黑树

    • TreeMap 基于红黑树实现,是一种自平衡二叉搜索树。
    • 插入键时,TreeMap 会根据键的自然顺序(或自定义比较规则)排列节点。
    • 查找、插入和删除的时间复杂度为 O(log n)
  2. 排序功能

    • 键需实现 Comparable 接口,或在 TreeMap 构造时传入一个自定义 Comparator

3. LinkedHashMap 的底层结构

  • 哈希表 + 双向链表

    • LinkedHashMap 是 HashMap 的子类,保留了键值对插入的顺序。

    • 通过双向链表维护插入顺序或访问顺序(可配置)。

    • 适用于需要有序遍历的场景,如缓存实现。

Map 的性能优化

1. 选择合适的实现类
  • 如果不关心顺序,优先使用 HashMap,其增删改查操作最为高效(均摊复杂度为 O(1))。
  • 如果需要按插入顺序或访问顺序遍历键值对,选择 LinkedHashMap
  • 如果需要键自动排序,选择 TreeMap

总结与比较

Map 实现类底层数据结构特点适用场景
HashMap数组 + 链表/红黑树高效、无序快速查找,键值无序的场景。
TreeMap红黑树自动排序需要按键排序的场景。
LinkedHashMap哈希表 + 双向链表插入/访问顺序一致缓存、按插入顺序遍历。

相关文章:

《从0到1常用Map集合核心摘要 + 不深不浅底层核心》

《从0到1常用Map集合核心摘要不深不浅底层核心》 前置知识 什么是键值对 ​ 键值对是一种数据结构&#xff0c;键是唯一标识&#xff0c;值是对应数据&#xff0c;用来快速查找信息。例&#xff1a; {"name": "Alice"}&#xff0c;键是name&#xff0c;…...

12 设计模式之工厂方法模式

一、什么是工厂方法模式&#xff1f; 1.定义 在软件开发中&#xff0c;设计模式 是解决常见软件设计问题的最佳实践。而 工厂方法模式&#xff08;Factory Method Pattern&#xff09; 作为创建型设计模式之一&#xff0c;常常被用来解决对象创建问题。它通过将对象的创建交给…...

spaCy 入门与实战:强大的自然语言处理库

spaCy 入门与实战&#xff1a;强大的自然语言处理库 spaCy 是一个现代化、工业级的自然语言处理&#xff08;NLP&#xff09;库&#xff0c;以高效、易用和功能丰富著称。它被广泛应用于文本处理、信息提取和机器学习任务中。本文将介绍 spaCy 的核心功能&#xff0c;并通过一…...

python包的管理和安装——笔记

1.列出包 pip list pip freeze 用这2个可以查看当前python 下所有的包和版本&#xff0c;还有下载地址 如果只是想导出当前的环境 可以用 2.安装pipreqs pip install pipreqs&#xff0c;pipreqs ./可以导出当前项目的包这个包 遇到编码报错 pipreqs ./ --encodingutf8 p…...

Vue前端页面内嵌套本项目iframe窗口的通信传输方式

一、目的 想要在iframe中使用本项目页面、并能够与其父页面组件实现实时通信。Vue前端页面内嵌套本项目iframe窗口的通信传输方式-星林社区 https://www.jl1mall.com/forum/PostDetail?postId20241202172800023969 二、iframe通信方式 1.接收消息 页面需要监听 message 事件…...

【WEB开发.js】addEventListener事件监听器的绑定和执行次数的问题(小心踩坑)

假设我们有一个按钮&#xff0c;用户点击该按钮后&#xff0c;会选择一个文件&#xff0c;且我们希望每次点击按钮时只触发一次文件处理。下面我会给你一个简单的例子&#xff0c;展示放在函数内部和放在函数外部的区别。 1. 将事件监听器放在函数内部&#xff08;问题的根源&…...

用于LiDAR测量的1.58um单芯片MOPA(一)

--翻译自M. Faugeron、M. Krakowski1等人2014年的文章 1.简介 如今&#xff0c;人们对高功率半导体器件的兴趣日益浓厚&#xff0c;这些器件主要用于遥测、激光雷达系统或自由空间通信等应用。与固态激光器相比&#xff0c;半导体器件更紧凑且功耗更低&#xff0c;这在低功率供…...

【GPT】代谢概念解读

以下是对代谢中分解代谢和合成代谢两个概念的深入解读&#xff0c;用简单易懂的方式展开说明&#xff1a; 1. 分解代谢&#xff08;Catabolism&#xff09; 什么是分解代谢&#xff1f; 分解代谢是身体把大分子“拆开”的过程。就像把一个三明治分解成面包片、肉片和菜叶&#…...

Devops-git篇-01-git环境配置

环境配置 设置用户签名 配置用户名&#xff1a; git config --global user.name 你的用户名 配置邮箱&#xff1a; git config --global user.email 注册的邮箱 配置好之后&#xff0c;可以用git config --global --list命令查看配置是否OK $ git config --global --list u…...

STM32 HAL库开发学习1.STM32CubeMX 新建工程

STM32 HAL库开发学习1.STM32CubeMX 新建工程 一、 STM32 CubeMX 下载二、CubeMX 功能介绍1. 固件包路径设置2. 新建工程 三、创建项目实例1. 新建项目2. GPIO 管脚设置3. GPIO 窗口配置4. 调试设置5. 时钟配置6. 项目管理&#xff08;1&#xff09;项目信息&#xff08;2&#…...

JS学习(2)(浏览器执行JS过程、JS的ECMAScript、DOM、BOM)

目录 一、浏览器如何执行JS&#xff1f; &#xff08;1&#xff09;浏览器主要的组成部分。 1、渲染引擎。 2、JS引擎。 &#xff08;2&#xff09;演示。 二、JS的组成。 &#xff08;1&#xff09;JS主要由三部分组成。 1、JS基础。 2、JS-API。 &#xff08;2&#xff09;EC…...

如何解决服务器扫描出的ASP木马问题

随着互联网的发展&#xff0c;网站安全问题日益凸显。其中&#xff0c;ASP&#xff08;Active Server Pages&#xff09;木马因其隐蔽性和危害性成为攻击者常用的手段之一。本文将详细介绍如何检测和清除服务器上的ASP木马&#xff0c;以保障网站的安全。 1. ASP木马概述 ASP…...

SpringBoot 架构助力夕阳红公寓管理系统可持续发展战略

摘 要 如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决现有问题而产生的。针对于夕阳红公…...

TCP、HTTP、RPC

一、TCP (Transmission Control Protocol) 定义 TCP&#xff08;传输控制协议&#xff09;是一种面向连接、可靠传输的传输层协议&#xff0c;用于在计算机网络中提供端到端的数据通信服务。它是互联网协议套件的一部分&#xff0c;与IP&#xff08;互联网协议&#xff09;一…...

《C++ 中 RNN 及其变体梯度问题的深度剖析与解决之道》

在当今人工智能蓬勃发展的浪潮中&#xff0c;递归神经网络&#xff08;RNN&#xff09;及其变体长短期记忆网络&#xff08;LSTM&#xff09;和门控循环单元&#xff08;GRU&#xff09;在处理序列数据方面展现出了强大的潜力。然而&#xff0c;当我们在 C中着手实现这些网络时…...

TypeScript 在 React 中的应用

文章目录 前言一、为什么要在 React 中使用 TypeScript&#xff1f;二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升&#xff0c;开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...

黑马2024AI+JavaWeb开发入门Day07-部门管理-日志技术飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;day07作业 完成新增班级和查询班级的接口开发 1、ClazzController.java package org.example.controller;import lombok.extern.slf4j.Slf4j; import org.example.pojo.Clazz; import org.example.service.Clazz…...

UIlicious - 自动化端到端测试

在现代软件开发中&#xff0c;测试自动化已然成为产品交付质量的基石。而端到端测试&#xff08;E2E&#xff09;&#xff0c;作为验证整个应用流畅运行的关键&#xff0c;常常是测试工作中最具挑战性的一环。这时&#xff0c;一款简单高效的自动化测试工具——UIlicious&#…...

JMeter中获取随机数、唯一ID、时间日期(包括当前日期增减)截取指定位数的字符等

在JMeter中&#xff0c;您可以使用内置的函数和一些额外的插件来获取随机数、唯一ID、时间日期以及截取指定位数的字符。以下是一些常用的方法&#xff1a; 获取随机数&#xff1a; 使用__Random函数&#xff0c;您可以在指定的最小值和最大值之间生成一个随机数。例如&#xf…...

构建自己的docker的ftp镜像

aarch64系统可运行的docker镜像 构建自己的vsftpd镜像&#xff0c;我是在windows系统下的docker desktop中构建运行于aarch64 GNU/Linux系统的ftp镜像。 系统环境&#xff1a; Welcome to Debian GNU/Linux with Linux x.x.x dockerfile FROM ubuntu:latestUSER rootRUN ap…...

船舶水动力学与运动控制技术指南:从理论建模到工程实践

船舶水动力学与运动控制技术指南&#xff1a;从理论建模到工程实践 【免费下载链接】FossenHandbook Handbook of Marine Craft Hydrodynamics and Motion Control is an extensive study of the latest research in marine craft hydrodynamics, guidance, navigation, and co…...

CPU 亲和性

CPU 亲和性本质CPU 亲和性 让进程 / 线程只在指定的 CPU 核心上运行的调度约束。内核里叫&#xff1a;sched_affinity&#xff08;调度亲和性&#xff09;作用&#xff1a;提高 L1/L2/L3 缓存命中率减少 上下文切换&#xff08;context switch&#xff09;避免跨 NUMA 节点访问…...

OneAPI安全增强指南:令牌过期策略、兑换码批量发放、用户邀请奖励机制详解

OneAPI安全增强指南&#xff1a;令牌过期策略、兑换码批量发放、用户邀请奖励机制详解 1. 引言&#xff1a;为什么你需要一个统一的大模型网关&#xff1f; 如果你正在使用或者管理多个大模型服务&#xff0c;比如 OpenAI 的 ChatGPT、百度的文心一言、阿里的通义千问&#x…...

Z-Image-Turbo_Sugar脸部Lora模型服务运维指南:监控、日志与故障排查

Z-Image-Turbo_Sugar脸部Lora模型服务运维指南&#xff1a;监控、日志与故障排查 最近在帮一个做创意设计的朋友维护他们的AI图像生成服务&#xff0c;他们用的就是Z-Image-Turbo_Sugar这个专门生成特定风格人脸的Lora模型。朋友跟我吐槽&#xff0c;说服务时不时就“抽风”&a…...

嵌入式图像处理实战:中值滤波 vs 均值滤波在STM32上的性能对比(附代码)

嵌入式图像处理实战&#xff1a;中值滤波 vs 均值滤波在STM32上的性能对比&#xff08;附代码&#xff09; 在机器人视觉或工业检测系统中&#xff0c;一个突如其来的像素噪点可能导致整个识别算法崩溃。我曾亲眼见证过某产线机械臂因图像传感器受到电磁干扰&#xff0c;将正常…...

LeetCode 11. Container With Most Water 题解

LeetCode 11. Container With Most Water 题解 题目描述 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条…...

PasteMD模板功能详解:创建个性化转换规则

PasteMD模板功能详解&#xff1a;创建个性化转换规则 你是不是经常从AI对话或者网页上复制内容到Word时&#xff0c;格式总是乱七八糟&#xff1f;公式变成乱码&#xff0c;表格错位&#xff0c;代码块失去高亮&#xff1f;PasteMD就是专门解决这个问题的神器&#xff0c;而它…...

comsol的单相变压器绕组及铁芯振动形变仿真模型 1、单相变压器组振动形变模型:绕组在漏磁场...

comsol的单相变压器绕组及铁芯振动形变仿真模型 1、单相变压器组振动形变模型:绕组在漏磁场的洛伦兹力作用下振动&#xff0c;在长期作用下发生位移形变 2、单相变压器铁芯振动形变模型:铁芯在磁致伸缩作用下发生振动形变 注:时域仿真可以设置观察点&#xff0c;导出随时间变化…...

初学Java之范型

范型包装类包装类的定义包装类的作用场景1&#xff1a;我想把数字放进列表里场景2&#xff1a;我想让方法返回"没有结果"场景3&#xff1a;我想用工具类处理数字场景4&#xff1a;泛型方法要求对象类型场景5&#xff1a;我想在同步代码块里用数字作为锁装箱与拆箱定义…...

别再踩坑了!Jetson Nano/Xavier NX上PyTorch和torchvision版本匹配保姆级指南(含JetPack 5/6)

Jetson设备PyTorch环境配置终极避坑手册&#xff1a;从版本匹配到性能调优 刚拿到Jetson Nano或Xavier NX的开发者们&#xff0c;十个里有九个会在PyTorch环境配置上栽跟头。不是torchvision报错就是CUDA不可用&#xff0c;最崩溃的是好不容易装好了却发现性能还不如树莓派。本…...