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

Wend看源码-Java-Collections 工具集学习

摘要   

  java.util.Collections它提供了一系列静态方法,用于对集合(如ListSetMap等)进行操作。这些操作包括排序、查找、替换、同步等多种功能,帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。

sort

        对指定的 List 进行自然排序(元素需实现 Comparable 接口)。或根据指定的 Comparator 实现来对 List 进行排序,通过自定义 Comparator 可以灵活地定义排序规则,比如实现降序排序或者按照特定业务逻辑排序等。

示例代码

 // 示例1 :使用 sort 对列表进行排序private static void sortList(){// 创建一个整数列表List<Integer> numberList = new ArrayList<>();numberList.add(5);numberList.add(3);numberList.add(8);numberList.add(1);// 1. 使用sort方法进行自然排序(升序)List<Integer> sortedList = new ArrayList<>(numberList);Collections.sort(sortedList);System.out.println("升序排序后的列表: " + sortedList);// 2. 使用自定义Comparator进行降序排序Comparator<Integer> reverseComparator = (a, b) -> b - a;Collections.sort(numberList, reverseComparator);System.out.println("降序排序后的列表: " + numberList);}

binarySearch

        二分查找。在已排序(升序)的 List 中使用二分查找算法查找指定元素 key,返回元素在列表中的索引,如果不存在则返回一个特定的负数表示插入点。

示例代码

// 示例2 :查找元素(二分查找,要求列表已排序)private static void binarySearch() {// 创建一个整数列表List<Integer> sortedList = new ArrayList<>();sortedList.add(1);sortedList.add(2);sortedList.add(3);sortedList.add(4);sortedList.add(5);// 3. 查找元素(二分查找,要求列表已排序)int index = Collections.binarySearch(sortedList, 3);System.out.println("元素3在升序排序后的列表中的索引: " + index);}

reverse

        反转指定 List 中元素的顺序。

示例代码

 // 示例3 :反转列表元素顺序private static void reverseList() {// 创建一个整数列表List<Integer> sortedList = new ArrayList<>();sortedList.add(1);sortedList.add(2);sortedList.add(3);sortedList.add(4);sortedList.add(5);// 4. 反转列表元素顺序Collections.reverse(sortedList);System.out.println("反转后的列表: " + sortedList);}

fill

        用指定的对象 obj 填充整个 List,也就是将列表中的所有元素都设置为 obj

示例代码

 // 示例4 :填充列表private static void fillList() {// 创建一个字符串列表List<String> stringList = new ArrayList<>();stringList.add("old");Collections.fill(stringList, "new");System.out.println("填充后的字符串列表: " + stringList);}

max(最大值)

        根据元素的自然顺序返回集合中的最大元素(元素需实现 Comparable 接口)。或依据指定的 Comparator 返回集合中的最大元素。

min(最小值)

        根据元素的自然顺序返回集合中的最小元素(元素需实现 Comparable 接口)。或依据指定的 Comparator 返回集合中的最小元素。

示例代码

 // 示例5 :获取最大值和最小值(自然顺序)private static void getMaxAndMin() {List<Integer> numberList = new ArrayList<>();numberList.add(10);numberList.add(20);numberList.add(5);System.out.println("最大值(自然顺序): " + Collections.max(numberList));System.out.println("最小值(自然顺序): " + Collections.min(numberList));}

unmodifiableList(不可变集合)

        返回指定 List 的不可变视图,对该视图进行修改操作会抛出 UnsupportedOperationException,可用于保护原始列表不被意外修改。类似的还有 unmodifiableSetunmodifiableMap 等针对 Set 和 Map 类型创建不可变视图的方法。

示例代码

 // 示例6 :创建不可变列表视图示例private static void createImmutableList() {List<Integer> sortedList = new ArrayList<>();sortedList.add(1);sortedList.add(2);sortedList.add(3);sortedList.add(4);sortedList.add(5);// 创建不可变列表视图示例List<Integer> immutableList = Collections.unmodifiableList(sortedList);// 下面这行代码会抛出UnsupportedOperationException异常,因为不可变视图不允许修改// immutableList.add(99);// 不可变的Set、MapSet<Integer> immutableSet = Collections.unmodifiableSet(new HashSet<>(sortedList));Map<Integer, String> immutableMap = Collections.unmodifiableMap(new HashMap<>());}

synchronizedList(同步集合)

        返回指定 List 的线程安全的同步包装版本,适用于多线程环境下对列表的操作,避免并发修改异常等问题。同样也有针对 Set 和 Map 的同步包装方法如 synchronizedSetsynchronizedMap

示例代码

 // 示例7 :使用 synchronizedList 创建线程安全的列表private static void synchronizedList() {List<Integer> sortedList = new ArrayList<>();sortedList.add(1);sortedList.add(2);sortedList.add(3);sortedList.add(4);sortedList.add(5);// 创建线程安全的列表List<Integer> synchronizedList = Collections.synchronizedList(sortedList);// 通过synchronizedList获取的列表是线程安全的,但是需要注意的是,对列表的迭代操作仍然需要手动同步synchronized (synchronizedList) {for (Integer num : synchronizedList) {System.out.println(num);}}}

copy(拷贝)

        将 src 列表中的元素拷贝到 dest 列表中,要求 dest 列表要有足够的空间(通常先创建一个合适大小的目标列表)

nCopies(创建不可变列表并填充指定元素)

        它用于创建一个不可变的List,其中包含指定数量(n)的指定对象(o)。

示例代码

 // 示例8 :使用 nCopies 创建指定大小的列表,并填充指定元素,使用copy复制一个Listprivate static void Copy() {List<Integer> sortedList = new ArrayList<>();sortedList.add(1);sortedList.add(2);sortedList.add(3);sortedList.add(4);sortedList.add(5);// 创建一个包含10个元素的列表,每个元素都是0List<Integer> copyList = new ArrayList<>(Collections.nCopies(10, 0));System.out.println("创建的列表: " + copyList);Collections.copy(copyList, sortedList);System.out.println("拷贝后: copyList: " + copyList);}

shuffle(重新洗牌)

        用于对指定的List进行随机重排(洗牌操作),使得列表中的元素顺序被打乱,并且所有可能的排列出现的概率大致相等。

示例代码

 // 示例9 :使用 shuffle 对列表进行洗牌private static void shuffleList() {List<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);Collections.shuffle(arrayList);System.out.println("Shuffled ArrayList: " + arrayList);List<Integer> linkedList = new LinkedList<>();linkedList.add(5);linkedList.add(6);linkedList.add(7);linkedList.add(8);Collections.shuffle(linkedList);System.out.println("Shuffled LinkedList: " + linkedList);}

swap(交换元素)

        用于交换指定列表中两个指定位置上的元素。

// 示例10 :使用 swap 交换列表中的元素private static void swapList() {// 创建一个包含若干元素的列表List<String> fruitList = new ArrayList<>();fruitList.add("Apple");fruitList.add("Banana");fruitList.add("Cherry");fruitList.add("Date");System.out.println("交换前的列表: " + fruitList);// 使用Collections.swap方法交换列表中指定位置的元素// 交换索引为1和索引为3的元素(也就是交换 "Banana" 和 "Date")Collections.swap(fruitList, 1, 3);System.out.println("交换后的列表: " + fruitList);}

rotate(元素右移)

        用于将指定列表中的元素向右旋转指定的距离。旋转操作会改变列表中元素的顺序,但是不会改变列表的大小。如果旋转的距离大于列表的大小,那么这个距离会被列表的大小取模。旋转的距离是指列表中的元素将要移动的位置数。如果距离是正数,元素将向右移动;如果距离是负数,元素将向左移动。

示例代码

// 示例11 :使用 rotate 向右旋转列表中的元素private static void rotateList() {// 创建一个包含若干元素的列表List<String> fruitList = new ArrayList<>();fruitList.add("Apple");fruitList.add("Banana");fruitList.add("Cherry");fruitList.add("Date");// 打印原始列表System.out.println("Original list: " + fruitList);// 向右旋转列表中的元素,距离为2Collections.rotate(fruitList, 2);// 打印旋转后的列表System.out.println("Rotated list: " + fruitList);}

replaceAll(替换全部)

        用于将列表中所有出现的一个指定的元素替换为另一个元素。这个方法会修改原始的列表。调用此方法时,列表中的所有匹配元素都会被替换。

示例代码

 // 示例12 :replaceAll 替换列表中的元素private static void replaceAll(){// 创建一个包含若干元素的列表List<String> fruitList2 = new ArrayList<>();fruitList2.add("Apple");fruitList2.add("Banana");fruitList2.add("Cherry");fruitList2.add("Date");// 打印原始列表System.out.println("Original list: " + fruitList2);// 使用Collections.replaceAll方法替换列表中的元素 将列表中的 "Banana" 替换为 "Grape"Collections.replaceAll(fruitList2, "Banana", "Grape");// 打印替换后的列表System.out.println("Replaced list: " + fruitList2);}

indexOfSubList(找到第一个包含子元素的位置)

        用于返回列表中第一次出现的指定子列表的起始索引,如果列表不包含子列表,则返回 -1。

lastIndexOfSubList(找到最后一个包含子元素的位置)

        用于返回列表中最后一次出现的指定子列表的起始索引,如果列表不包含子列表,则返回 -1。

示例代码

 // 示例13 :indexOfSubList 和 lastIndexOfSubList 查找子列表的位置private static void indexOfSubList(){// 创建一个包含若干元素的列表List<String> fruitList3 = new ArrayList<>();fruitList3.add("Apple");fruitList3.add("Banana");fruitList3.add("Cherry");fruitList3.add("Date");fruitList3.add("Apple");fruitList3.add("Banana");// 创建一个包含若干元素的子列表List<String> subList = new ArrayList<>();subList.add("Apple");subList.add("Banana");// 使用Collections.indexOfSubList方法查找子列表的位置int index1 = Collections.indexOfSubList(fruitList3, subList);System.out.println("Index of sublist: " + index1);// 使用Collections.lastIndexOfSubList方法查找子列表的位置int index2 = Collections.lastIndexOfSubList(fruitList3, subList);System.out.println("Last index of sublist: " + index2);}

checkedCollection(进行类型检查的集合)

        用于创建一个动态类型安全的集合视图。在运行时会对添加、修改等操作涉及的元素类型进行严格检查,确保集合中的元素类型符合指定的类型要求,若不符合则抛出 ClassCastException 异常,以此增强程序的类型安全性。同样也有针对List、 Set 和 Map 的方法如 checkedList、checkedSet和 checkedMap。

示例代码

 // 示例14 : 使用checkedCollection创建类型检查集合private static void checkedCollection(){ArrayList rawList = new ArrayList<>();rawList.add(1);rawList.add("hello");// 创建一个只允许存放Integer类型元素的检查集合,以rawList为基础Collection checkedCollection = Collections.checkedCollection(rawList, Integer.class);try {// 尝试添加一个符合要求的Integer元素,操作正常checkedCollection.add(2);// 尝试添加一个不符合要求的String元素,会抛出ClassCastExceptioncheckedCollection.add("world");} catch (ClassCastException e) {System.out.println("类型不匹配,出现异常: " + e.getMessage());}}

emptyList(创建一个空集合)

        该方法常用于需要返回一个空列表的情况,避免创建不必要的可变列表实例,提升性能和代码的简洁性。同样也有针对Set 和 Map 的方法如emptySet和emptyMap 等。

singletonList(单元素集合)

        方法会创建一个不可变的列表,该列表只包含一个指定的元素。这个列表的长度固定为 1,同样也是不可变的,任何修改操作都会引发 UnsupportedOperationException 异常。常用于只需要表示单个元素的列表场景,比如某些方法要求传入一个列表参数,但实际只有一个值的情况。同样也有针对Set和Map的方法如singleton和singletonMap。

示例代码

// 示例15. 创建空集合,单元素集合private static void emptyAndSingleton(){// 示例18. 创建空集合List<String> empty = Collections.emptyList();System.out.println("创建的空列表: " + empty);// 示例19. 创建单元素集合List<String> singleton = Collections.singletonList("hello");System.out.println("创建的单元素列表: " + singleton);// 创建单元素只读MapMap<String, Integer> readOnlyMap = Collections.singletonMap("key", 1);System.out.println("创建的只读Map: " + readOnlyMap);// 创建不可变SetSet<String> immutableSet2 = Collections.singleton("hello");System.out.println("创建的不可变Set: " + immutableSet2);}

frequency(统计元素出现次数)

        方法用于统计指定元素在给定集合中出现的次数。它遍历整个集合,通过比较元素是否相等(使用 equals 方法判断)来确定指定元素出现的频次,然后返回对应的整数值。

示例代码

  // 示例15.frequency 计算元素出现的次数private static void frequency(){List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("apple");int count = Collections.frequency(list, "apple");System.out.println("元素 'apple' 在列表中出现的次数: " + count);}

disjoint(判断两个列表是否不相交)

        用于判断两个集合是否没有共同的元素(即是否 “不相交”)。它会遍历两个集合中的元素,通过比较元素是否相等(使用 equals 方法判断)来确定它们之间是否存在交集。如果两个集合没有任何相同的元素,则返回 true;反之,若存在至少一个相同元素,则返回 false

示例代码

 // 示例16.disjoint 判断两个集合是否有交集private static void disjoint(){List<String> list1 = new ArrayList<>();list1.add("a");list1.add("b");List<String> list2 = new ArrayList<>();list2.add("c");list2.add("d");boolean disjoint = Collections.disjoint(list1, list2);System.out.println("两个集合是否不相交: " + disjoint);List<String> list3 = new ArrayList<>();list3.add("a");list3.add("e");disjoint = Collections.disjoint(list1, list3);System.out.println("另外两个集合是否不相交: " + disjoint);}

newSetFromMap

        方法利用给定的 Map 来创建一个 Set。实际上返回的 Set 实现是基于传入的 Map 的,Set 中的元素对应 Map 的键,添加到 Set 中的元素会在 Map 中相应地添加键,并将对应的值设置为 Boolean.TRUE。这个方法常用于需要自定义 Set 的一些特性(例如基于特定的 Map 实现来获得不同的性能、同步等特性)的场景。

示例代码

// 示例17. 使用newSetFromMap创建基于Map的Setprivate static void newSetFromMap(){Map<String, Boolean> underlyingMap = new HashMap<>();// 基于自定义的Map创建一个SetSet<String> customSet = Collections.newSetFromMap(underlyingMap);customSet.add("element1");customSet.add("element2");System.out.println("基于Map创建的Set: " + customSet);System.out.println("对应的Map内容: " + underlyingMap);}

相关推荐

        开源项目 JavaUsefulMode:JavaUsefulMode: 基于Java 语言的自定义实用工具集

        JavaUsefulMode是小编编写Java方向学习专栏时的代码示例汇总总结,其中包含了本章节对于java.util.Collections的工具类学习的代码示例,感兴趣的小伙伴可以直接下载学习。

相关文章:

Wend看源码-Java-Collections 工具集学习

摘要 java.util.Collections它提供了一系列静态方法&#xff0c;用于对集合&#xff08;如List、Set、Map等&#xff09;进行操作。这些操作包括排序、查找、替换、同步等多种功能&#xff0c;帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...

[JAVA]MyLogger

import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式&#xff0c;这样看起来比较方便些**/ class MyFormatter extends Formatter {Overridepublic String format(LogRecord ar…...

玩转OCR | 腾讯云智能结构化OCR初次体验

目录 一、什么是OCR&#xff08;需要了解&#xff09; 二、产品概述与核心优势 产品概述 智能结构化能做什么 举例说明&#xff08;选看&#xff09; 1、物流单据识别 2、常见证件识别 3、票据单据识别 4、行业材料识别 三、产品特性 高精度 泛化性 易用性 四、…...

记一次 dockerfile 的循环依赖错误

文章目录 1. 写在最前面1.1 具体循环依赖的例子 2. 报错的位置2.1 代码快速分析2.2 代码总结2.3 关于 parser 的记录 3. 碎碎念 1. 写在最前面 笔者在使用 dockerfile 多阶段构建的功能时&#xff0c;写出了一个「circular dependency detected on stage: xx」的错误。 解决方…...

Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】

随着城市化进程的快速推进&#xff0c;城市高层建筑不断增多&#xff0c;对建筑质量的要求也在不断提高。建筑外墙检测&#xff0c;如平整度和垂直度检测&#xff0c;是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下&#xff0c;还难以全面反映墙体的真…...

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言&#xff1a;**本节内容介绍使用C/C访问数据库&#xff0c; 包括对数据库的增删查改操作。 主要是学习一些接口的调用&#xff0c; 废话不多说&#xff0c; 开始我们的学习吧&#xff01; ps:本节内容比较容易&#xff0c; 友友们放心观看哦&#xff01; 目录 准备mysql…...

LabVIEW化工实验室设备故障实时监测

化工实验室中&#xff0c;各类设备的运行状态直接影响实验的精度与安全性。特别是重要分析仪器的突发故障&#xff0c;可能导致实验中断或数据失效。为了实现设备运行状态的实时监控与故障快速响应&#xff0c;本文提出了一套基于LabVIEW的解决方案&#xff0c;通过多参数采集、…...

单例模式懒汉式、饿汉式(线程安全)

饿汉式单线程安全吗 饿汉式单例&#xff08;Eager Singleton&#xff09;是线程安全的。这种实现方式在类加载时就创建了单例实例&#xff0c;因此在多线程环境中&#xff0c;不存在多个线程同时创建实例的问题。 饿汉式单例的实现 以下是一个饿汉式单例的示例&#xff1a; …...

Cursor登录按钮点击没反应

问题 系统&#xff1a;Windows11 Cursor&#xff1a;Cursor 0.44.9 当安装Cursor打开进行登录时&#xff0c;点击Sign in没反应 解决方案 1.打开window11的设置 2.点击应用中的默认应用 3.在设置应用程序的默认值中搜索Google&#xff08;没有Google浏览器的尝试下载一个&a…...

论文实现:Reactive Nonholonomic Trajectory Generation via Parametric Optimal Control

1. 多项式螺旋 曲率&#xff1a; κ ( s ) a 0 a 1 s a 2 s 2 a 3 s 3 a 4 s 4 a 5 s 5 \begin{align} \kappa(s) a_0 a_1s a_2s^2 a_3s^3 a_4s^4 a_5s^5 \end{align} κ(s)a0​a1​sa2​s2a3​s3a4​s4a5​s5​​ 机器人朝向&#xff1a; θ ( s ) a 0 s a 1 …...

基于单片机中药存放环境监测系统的实现

基于单片机中药存放环境监测系统的实现 项目开发背景 随着现代中药的广泛应用&#xff0c;中药材的存储环境对其质量有着至关重要的影响。温湿度、烟雾、火灾等环境因素&#xff0c;若不加以控制&#xff0c;将会导致中药材失效或变质。因此&#xff0c;设计一个基于单片机的…...

九垠赢+商业管理系统 Common.ashx 文件上传致RCE漏洞复现

0x01 产品简介 九垠赢+商业管理系统是基于互联网技术的进销存管理软件,适用于新零售背景下各种业态的线上线下一体化的商超经营管理。赢+ERP以商业管理系统为底座,融合了多种软、硬件解决方案,实现了从企业、供应商、三方平台到顾客等日常管理的全线数字化、智能化和移动化…...

速盾:服务器CDN加速解析的好处有哪些呢?

随着互联网应用的普及&#xff0c;越来越多的企业开始关注如何提升网站的访问速度和用户体验。为了实现这一目标&#xff0c;许多企业选择使用CDN&#xff08;内容分发网络&#xff09;来加速网站的内容分发。CDN通过在全球范围内分布多个节点&#xff0c;将内容缓存到离用户最…...

C++ 设计模式:备忘录模式(Memento Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 状态模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用&#xff…...

Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法

Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法 目录 引言Activity 系统层概述Activity 系统架构图Activity 系统层深度定制的方法 4.1 自定义 Activity 生命周期4.2 自定义 Activity 启动流程4.3 自定义 Activity 转场动画4.4 自定义 Activity 窗口管理4…...

PDF怎么压缩得又小又清晰?5种PDF压缩方法

PDF 文件在日常办公与学习中使用极为频繁&#xff0c;可想要把它压缩得又小又清晰却困难重重。一方面&#xff0c;PDF 格式本身具有高度兼容性&#xff0c;集成了文字、图像、矢量图等多样元素&#xff0c;压缩时难以兼顾不同元素特性&#xff0c;稍不注意&#xff0c;文字就会…...

YK人工智能(三)——万字长文学会torch深度学习

2.1 张量 本节主要内容&#xff1a; 张量的简介PyTorch如何创建张量PyTorch中张量的操作PyTorch中张量的广播机制 2.1.1 简介 几何代数中定义的张量是基于向量和矩阵的推广&#xff0c;比如我们可以将标量视为零阶张量&#xff0c;矢量可以视为一阶张量&#xff0c;矩阵就是…...

关于CISP报名费用详情

CISP即“注册信息安全专业人员”&#xff0c;是中国信息安全测评中心实施的国家认证项目&#xff0c;旨在培养信息安全领域的专业人才。对于有意报考CISP的考生而言&#xff0c;了解报名考试费用是备考过程中不可或缺的一环。 CISP的报名考试费用主要包括培训费用、考试费用、…...

vim 按下esc后取消高亮

配置 ideavimrc文件 " 按下 Esc 键时自动取消高亮 " 在普通模式下按下 Esc 键取消高亮 nnoremap <Esc> :nohlsearch<CR> " 在插入模式下按下 Esc 键取消高亮 inoremap <Esc> <Esc>:nohlsearch<CR>" 额外&#xff1a;当退出…...

SwiftUI:多语言实现富文本插值

实现的UI需求&#xff1a; 要求&#xff1a; 英文显示&#xff1a;3068 people have joined this plan today! 中文显示&#xff1a;今日有 3068 人已加入此计划&#xff01; 实现代码&#xff1a; Text(AttributedString(localized:"**\(payPeoples)** people have joi…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...