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

Java集合框架解析

一、集合框架概述

1. 集合框架体系结构

Java集合框架(Java Collections Framework, JCF)位于java.util包中,包含三大核心接口:

  • Collection:单列数据集合的根接口
    • List:有序可重复集合
    • Set:无序不可重复集合
    • Queue:队列集合
  • Map:双列键值对集合
  • Iterator:集合遍历接口

2. 核心接口继承关系

Collection
├── List
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
│       └── Stack
├── Set
│   ├── HashSet
│   │   └── LinkedHashSet
│   └── SortedSet
│       └── TreeSet
└── Queue├── Deque│   ├── ArrayDeque│   └── LinkedList└── PriorityQueueMap
├── HashMap
│   └── LinkedHashMap
├── Hashtable
└── SortedMap└── TreeMap

二、基础集合使用

1. List接口实现

ArrayList
// 创建ArrayList
List<String> arrayList = new ArrayList<>();// 添加元素
arrayList.add("Java");
arrayList.add("Python");
arrayList.add(1, "C++"); // 在指定位置插入// 访问元素
String lang = arrayList.get(0); // "Java"// 遍历
for (String s : arrayList) {System.out.println(s);
}// 删除元素
arrayList.remove("Python");
arrayList.remove(0);
LinkedList
// 创建LinkedList
List<String> linkedList = new LinkedList<>();// 特有方法
LinkedList<String> list = (LinkedList<String>) linkedList;
list.addFirst("First");
list.addLast("Last");
String first = list.getFirst();
String last = list.getLast();

2. Set接口实现

HashSet
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // 重复元素不会被添加System.out.println(hashSet); // [Apple, Banana]
TreeSet
Set<Integer> treeSet = new TreeSet<>((a, b) -> b - a); // 自定义排序
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);System.out.println(treeSet); // [8, 5, 2]

3. Map接口实现

HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Charlie", 28);// 获取值
int age = hashMap.get("Bob");// 遍历
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());
}
TreeMap
Map<String, Integer> treeMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
treeMap.put("Banana", 3);
treeMap.put("apple", 5);
treeMap.put("Orange", 2);System.out.println(treeMap); // {apple=5, Banana=3, Orange=2}

三、集合转换操作

1. 集合间相互转换

List ↔ Set
// List转Set(去重)
List<String> listWithDuplicates = Arrays.asList("A", "B", "A", "C");
Set<String> set = new HashSet<>(listWithDuplicates); // [A, B, C]// Set转List
List<String> listFromSet = new ArrayList<>(set);
数组 ↔ List
// 数组转List
String[] array = {"Java", "Python", "C++"};
List<String> list = Arrays.asList(array); // 固定大小List
List<String> mutableList = new ArrayList<>(Arrays.asList(array));// List转数组
String[] newArray = list.toArray(new String[0]);
Map ↔ Set
// Map的key转Set
Set<String> keys = hashMap.keySet();// Map的entry转Set
Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();// Set转Map(需要元素包含键值信息)
Set<Pair<String, Integer>> pairSet = new HashSet<>();
// ...添加元素
Map<String, Integer> mapFromSet = pairSet.stream().collect(Collectors.toMap(Pair::getKey, Pair::getValue));

2. 不可变集合

Java 9+创建不可变集合
List<String> immutableList = List.of("A", "B", "C");
Set<Integer> immutableSet = Set.of(1, 2, 3);
Map<String, Integer> immutableMap = Map.of("A", 1, "B", 2);// 尝试修改会抛出UnsupportedOperationException
// immutableList.add("D"); // 错误
Collections工具类创建
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> unmodifiableList = Collections.unmodifiableList(list);

四、集合流式处理(Java 8+)

1. 基本流操作

过滤与映射
List<String> languages = Arrays.asList("Java", "Python", "C++", "JavaScript", "Ruby");// 过滤长度大于3的元素
List<String> filtered = languages.stream().filter(s -> s.length() > 3).collect(Collectors.toList()); // [Java, Python, JavaScript, Ruby]// 转换为大写
List<String> upperCase = languages.stream().map(String::toUpperCase).collect(Collectors.toList());
聚合操作
// 统计
long count = languages.stream().count();
Optional<String> max = languages.stream().max(Comparator.naturalOrder());// 求和
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);

2. 高级流操作

分组与分区
// 按长度分组
Map<Integer, List<String>> groupByLength = languages.stream().collect(Collectors.groupingBy(String::length));
// {2=[C++], 4=[Java, Ruby], 6=[Python], 10=[JavaScript]}// 分区(满足条件的和其他的)
Map<Boolean, List<String>> partition = languages.stream().collect(Collectors.partitioningBy(s -> s.startsWith("J")));
// {false=[Python, C++, Ruby], true=[Java, JavaScript]}
并行流
// 顺序流
long count = languages.stream().filter(s -> s.length() > 3).count();// 并行流(大数据量性能更好)
long parallelCount = languages.parallelStream().filter(s -> s.length() > 3).count();

五、集合与数组转换

1. 集合转数组

传统方式
List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[0]); // 推荐使用空数组
Java 8+ Stream方式
String[] array = list.stream().toArray(String[]::new);

2. 数组转集合

标准方式
String[] array = {"A", "B", "C"};// 固定大小List(不可修改)
List<String> asList = Arrays.asList(array);// 可变List
List<String> mutableList = new ArrayList<>(Arrays.asList(array));
Java 8+ Stream方式
List<String> list = Arrays.stream(array).collect(Collectors.toList());// 去重
Set<String> set = Arrays.stream(array).collect(Collectors.toSet());

六、集合框架底层实现

1. ArrayList实现原理

  • 底层结构:动态数组Object[] elementData
  • 扩容机制
    • 默认初始容量10
    • 扩容时newCapacity = oldCapacity + (oldCapacity >> 1)(约1.5倍)
    • 最大容量Integer.MAX_VALUE - 8
  • 特点
    • 随机访问快(O(1))
    • 插入删除慢(平均O(n))
    • 线程不安全

2. LinkedList实现原理

  • 底层结构:双向链表
    private static class Node<E> {E item;Node<E> next;Node<E> prev;// ...
    }
    
  • 特点
    • 插入删除快(O(1))
    • 随机访问慢(O(n))
    • 实现了List和Deque接口

3. HashMap实现原理(Java 8+)

  • 底层结构:数组+链表+红黑树
    • 默认初始容量16,负载因子0.75
    • 链表长度>8且数组长度≥64时,链表转红黑树
    • 树节点数<6时,红黑树转链表
  • 哈希计算
    static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
    
  • 扩容机制
    • 容量变为2倍
    • 重新计算节点位置:newTab[e.hash & (newCap - 1)]

4. TreeMap实现原理

  • 底层结构:红黑树(自平衡二叉查找树)
  • 排序规则
    • 自然排序(元素实现Comparable)
    • 或通过Comparator自定义排序
  • 特点
    • 查找、插入、删除时间复杂度O(log n)
    • 保持元素有序

七、集合框架性能比较

1. List实现比较

操作ArrayListLinkedList
get(int)O(1)O(n)
add(E)平均O(1)O(1)
add(int, E)O(n)O(1)
remove(int)O(n)O(1)
内存占用较小(仅数组)较大(节点开销)

2. Set实现比较

特性HashSetLinkedHashSetTreeSet
底层实现HashMapLinkedHashMapTreeMap
顺序无序插入顺序自然/自定义排序
时间复杂度O(1)O(1)O(log n)
线程安全

3. Map实现比较

特性HashMapLinkedHashMapTreeMapHashtable
底层实现数组+链表+红黑树链表+哈希表红黑树数组+链表
顺序无序插入/访问顺序键排序无序
线程安全
允许null

八、线程安全集合

1. 传统线程安全集合

Vector和Hashtable
// 线程安全但性能较差
Vector<String> vector = new Vector<>();
Hashtable<String, Integer> hashtable = new Hashtable<>();
Collections.synchronizedXXX
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());

2. Java 5+并发集合

CopyOnWriteArrayList
// 写时复制,适合读多写少场景
List<String> cowList = new CopyOnWriteArrayList<>();
ConcurrentHashMap
// 分段锁实现高并发
Map<String, Integer> concurrentMap = new ConcurrentHashMap<>();
BlockingQueue
// 阻塞队列
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
queue.put("item");  // 阻塞直到空间可用
String item = queue.take();  // 阻塞直到元素可用

九、最佳实践

1. 集合选择策略

  • 需要快速随机访问:ArrayList
  • 频繁插入删除:LinkedList
  • 去重存储:HashSet/LinkedHashSet/TreeSet
  • 键值存储:HashMap/LinkedHashMap/TreeMap
  • 线程安全:ConcurrentHashMap/CopyOnWriteArrayList

2. 性能优化建议

  1. 初始化合适容量

    new ArrayList<>(100);  // 避免频繁扩容
    new HashMap<>(32, 0.75f);
    
  2. 使用forEach代替迭代器

    // Java 8+
    list.forEach(System.out::println);
    map.forEach((k, v) -> System.out.println(k + ": " + v));
    
  3. 避免在循环中修改集合

    // 错误方式 - 可能抛出ConcurrentModificationException
    for (String item : list) {if (condition) {list.remove(item);}
    }// 正确方式 - 使用迭代器
    Iterator<String> it = list.iterator();
    while (it.hasNext()) {if (condition) {it.remove();}
    }
    

3. 常见陷阱

  1. Arrays.asList返回固定大小List

    List<String> list = Arrays.asList("A", "B", "C");
    // list.add("D"); // 抛出UnsupportedOperationException
    
  2. 集合元素可变性问题

    Set<Date> dates = new HashSet<>();
    Date now = new Date();
    dates.add(now);
    now.setTime(now.getTime() + 1000); // 修改后影响集合行为
    
  3. equals和hashCode不一致

    class Person {String name;// 如果只重写equals不重写hashCode,会导致HashSet/HashMap行为异常
    }
    

十、Java 8-17集合新特性

1. Java 8增强

  • Stream API:函数式集合操作
  • HashMap性能提升:链表转红黑树
  • 新增方法
    map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
    list.removeIf(e -> e.length() > 5);
    

2. Java 9增强

  • 工厂方法创建不可变集合
    List<String> list = List.of("A", "B", "C");
    Set<Integer> set = Set.of(1, 2, 3);
    Map<String, Integer> map = Map.of("A", 1, "B", 2);
    

3. Java 10增强

  • copyOf创建不可变集合
    List<String> copy = List.copyOf(originalList);
    

4. Java 16增强

  • Stream.toList()简化
    List<String> list = stream.toList(); // 替代collect(Collectors.toList())
    

通过深入理解Java集合框架的设计原理和使用方法,开发者可以编写出更高效、更健壮的代码。集合框架是Java编程中最常用的工具之一,掌握其特性和最佳实践对提高开发效率至关重要。

相关文章:

Java集合框架解析

一、集合框架概述 1. 集合框架体系结构 Java集合框架&#xff08;Java Collections Framework, JCF&#xff09;位于java.util包中&#xff0c;包含三大核心接口&#xff1a; Collection&#xff1a;单列数据集合的根接口 List&#xff1a;有序可重复集合Set&#xff1a;无序…...

《100天精通Python——基础篇 2025 第1天:从编程语言到计算机基础,开启你的学习之旅》

目录 一、计算机组成原理之概述篇二、编程语言是什么三、编译型语言和解释型语言的区别3.1 编译型语言3.2 解释型语言 四、Python是什么五、Python有哪些优点和缺点&#xff1f;5.1 Python的优点5.2 Python 的缺点 六、学Python能干什么&#xff0c;Python的应用领域有哪些&…...

JavaFX 第三篇 HostServices和Platform

1、HostServices类 介绍这个类主要是使用里面的一个方法 返回类型方法说明voidshowDocument(java.lang.String uri)使用默认浏览器打开一个url地址 /*** description: 程序打开3秒后&#xff0c;打开百度* author: HK* since: 2025/4/24 16:40*/ public class Demo1 extends…...

【Java 8新特性】Stream API 和 Lambda 表达式

一、前言 Java 8 的 Stream API 和 Lambda 表达式 为集合处理带来了函数式编程风格&#xff0c;显著简化了代码并提高了可读性。 二、Lambda 表达式 1.作用 简化匿名内部类的语法&#xff0c;允许将函数作为参数传递。实现函数式接口&#xff08;只有一个抽象方法的接口&…...

Vue 3 相比 Vue 2 的优势

1. 性能优化 更快的渲染&#xff1a; 基于 Proxy 的响应式系统&#xff0c;比 Vue 2 的 Object.defineProperty 更高效&#xff0c;初始化速度和内存占用优化显著。编译时优化&#xff08;如静态树提升、补丁标志等&#xff09;&#xff0c;减少运行时开销。 更小的体积&#…...

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南

深度解析 TransmittableThreadLocal(TTL):原理、实战与优化指南 在现代 Java 应用中,ThreadLocal 被广泛用于线程隔离上下文,比如用户会话、链路追踪等。但随着线程池的普及,ThreadLocal 也暴露出严重局限性,尤其是在异步场景中上下文无法正确传递的问题。 本文从 Thr…...

入门 Go 语言

本专栏的 Go 语言学习参考了B站UP 软件工艺师的视频 本节需要&#xff1a; Go 语言环境VSCode 安装环境 下载 Go 环境&#xff0c;并安装下载 VSCode&#xff0c;安装。在 VSCode 中安装 Go 扩展&#xff1a; 接下来就可以编写 Go 语言了 第一条 Go Go 语言是一种编译型…...

膳食营养诊断活动:科技赋能,共筑全民健康新基石

膳食营养诊断活动&#xff1a;科技赋能&#xff0c;共筑全民健康新基石 一、活动背景&#xff1a;响应营养周号召&#xff0c;开启健康新征程 &#xff08;一&#xff09;2025营养周主题解读 2025年全民营养周的核心主题“吃动平衡&#xff0c;健康体重&#xff0c;全民行动…...

考拉悠然:科技与匠心,以烟草虫情AI监测系统共筑品质未来

李工&#xff0c;一位在卷烟厂辛勤耕耘了二十余载的老工艺师&#xff0c;他的青春和汗水&#xff0c;都挥洒在了这片弥漫着烟草香气的土地上。他像一位老农&#xff0c;精心呵护着每一片烟叶&#xff0c;因为他深知&#xff0c;烟草品质的把控&#xff0c;就是守护着卷烟厂的生…...

k8s基于角色的访问控制(RBAC)

Kubernetes&#xff08;k8s&#xff09;权限管理主要是基于角色的访问控制&#xff08;RBAC&#xff09;&#xff0c;以下是其核心内容&#xff1a; 核心概念 Role 和 ClusterRole Role &#xff1a;定义特定命名空间内的权限规则&#xff0c;用于在某个命名空间内设置访问权限…...

拆解华为Pura X新发现:“仿生”散热与钛合金“骨架”

拆解华为Pura X新发现&#xff1a;“仿生”散热与钛合金“骨架” 原创 黑毛警长008 AR圈 2025年04月24日 09:42 广东 01 引言&#xff1a;AI时代带来折叠屏新挑战 随着华为Pura X的发布&#xff0c;市场上已出现多家机构的拆解分析&#xff0c;但大多聚焦于芯片和电子组件层面…...

Typecho 访客统计插件最新版-前后台统计图均可显示

这是一个为 Typecho 博客系统开发的访客统计插件&#xff0c;基于原版的VistorLogger修改版本。该插件提供了详细的访问统计功能&#xff0c;包括访问国家/地区统计、IP分布等信息&#xff0c;并进行了隐私保护处理。 功能特点 独立页面模板显示访问国家/地区统计&#xff08…...

与智者同行:京东零售技术人的成长书单

我们正处在一个快速变化的时代&#xff0c;信息洪流奔涌而来&#xff0c;如何穿透纷繁的表象&#xff0c;理解世界的复杂性&#xff1f;又如何在充满不确定性的环境中&#xff0c;找到属于自己的方向&#xff1f; 阅读&#xff0c;是最从容的答案&#xff0c;让我们站在智者的…...

matplotlib1-画成对数据图

画图的类型 成对数据&#xff08;Pairwise data&#xff09; 成对形式的数据 (x, y)&#xff1b;表格形式的数据 (var_0, var_1, ..., var_n) &#xff1b;函数形式的数据 f(x) y 1. 绘图-plot(x, y) 以线条或标记的形式将 y 随 x 的变化情况绘制成图表。 2. 散点图-scatt…...

深入理解表单---提交用户与网页交互的重要方式:GET 与 POST 的本质区别与应用实践

在 Web 开发中&#xff0c;表单&#xff08;<form>&#xff09;是用户与网页交互的重要方式&#xff0c;而表单的 method 属性则决定了数据是如何发送到服务器的。本文将带你系统理解 GET 和 POST 请求方式的区别、使用场景与注意事项&#xff0c;并结合示例进行实战分析…...

VIVADO中单bit信号的跨时钟域处理(快时钟到慢时钟)

VIVADO中单bit信号的跨时钟域处理 同步触发器的约束&#xff0c;确保软件布局布线时把同步的触发器放到同一个SLICE中 目录 前言 一、快时钟的脉冲到慢时钟的同步方法一 1、正确结果 2、源时钟脉冲展宽组合逻辑输出不加触发器的风险 3、目的时钟采样组合逻辑输出不加触发器…...

解决 Windows10 下 UWP 应用无法使用本地代理

从Micorsoft Store下载的应用默认不允许使用本地代理(或者说就不允许访问localhost) 但是可以借助于系统自带的 CheckNetIsolation 工具来突破该限制 操作 找出要修改的应用 SID 在注册表 HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Cur…...

实验三 进程间通信实验

一、实验目的 1、了解什么是信号。 2、熟悉LINUX系统中进程之间软中断通信的基本原理。 3、理解进程的同步关系。 4、掌握用信号实现进程间的同步操作。 5、了解什么是管道。 6、熟悉UNIX/LINUX支持的管道通信方式。 二、实验内容 1、阅读下列程序&#xff0c;执行程序…...

NHANES指标推荐:TyG-WHtR

文章题目&#xff1a;Can cardiovascular health and its modifiable healthy lifestyle offset the increased risk of all-cause and cardiovascular deaths associated with insulin resistance? DOI&#xff1a;10.1186/s12933-025-02674-z 中文标题&#xff1a;心血管健康…...

Winddows11官网下载安装VMware Workstation Pro17(图文详解)

Winddows11安装VMware17 1、官网下载2、安装3、总结 1、官网下载 官网地址 点击Products&#xff0c;滑到最下面&#xff0c;选择SEE DESKTOPP HYPERVISORS 选择 DOWNLOAD FUSION OR WORKSTATION 自动跳转到下面哪个服界面&#xff0c;注册 输入邮箱地址和图片下面的文字…...

YOLO训练时到底需不需要使用权重

1. 预训练权重的作用与本质 预训练权重&#xff08;Pretrained Weights&#xff09;是在大规模数据集上训练得到的模型参数。这些权重能够学习通用的特征模式&#xff0c;如边缘、纹理、形状等&#xff0c;从而帮助模型更快收敛并提高泛化能力。YOLO提供的官方预训练权重通常基…...

2025最新软件测试面试八股文(答案+文档+视频讲解)

1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&…...

SpringBoot整合AOP

没事做个Demo案例&#xff0c;首先看下项目结构&#xff1a; 第1步&#xff0c;导入依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 第2步…...

第16章:MCP服务端项目开发实战:对话系统

第16章:MCP服务端项目开发实战:对话系统 对话系统,尤其是聊天机器人和虚拟助手,是 AI Agent 最广泛的应用领域之一。然而,传统的对话系统常常面临挑战,如难以维持长对话连贯性、缺乏个性化交互、无法有效利用对话中积累的知识等。MCP(Memory, Context, Planning)框架为…...

JavaScript 页面刷新:从传统到现代的全面解析

在 Web 开发中&#xff0c;"刷新"是一个基础但极其重要的功能。本文将全面探讨页面刷新的实现方式&#xff0c;从传统方法到现代最佳实践&#xff0c;深入解析每一种方案的原理和适用场景&#xff0c;并给出实用代码示例。 一、理解页面刷新的本质 在 Web 开发中&am…...

2025年Google Play审核策略全面解析

大家好&#xff0c;我是老妙&#xff0c;出海十余年的老司机&#xff0c;目前在死磕google play上架这一块。 目前来说&#xff0c;上架这一块不管是合规产品还是不合规产品&#xff0c;都建议使用有在架包的老号&#xff0c;更稳定&#xff0c;上架的审核时间更短&#xff0c…...

使用PHP对接印度尼西亚股票市场

在本篇文章中&#xff0c;我们将介绍如何使用PHP语言与StockTV API接口对接&#xff0c;获取并处理印度尼西亚&#xff08;Indonesia&#xff09;的股票市场数据。我们将以查询IPO信息和查看涨跌排行榜为例&#xff0c;展示具体的操作流程。 准备工作 首先&#xff0c;确保您…...

第54讲:总结与前沿展望——农业智能化的未来趋势与研究方向

目录 一、本板块内容回顾:人工智能助力农业的多元化应用 ✅ 精准农业与AI ✅ 农业金融与AI ✅ AI与农业政策 ✅ 农业物联网与AI 二、前沿趋势与研究方向:迈向智能、可持续农业的未来 1. AIGC(生成式AI)在农业中的应用 2. 数字孪生农业:虚拟与现实的无缝对接 3. A…...

Go语言中包导入下划线的作用解析

在Go语言的代码中&#xff0c;有时会看到类似以下的导入语句&#xff1a; import _ "github.com/mattn/go-sqlite3"这种以下划线_开头的导入方式&#xff0c;显得有些特别&#xff0c;尤其是对于新手来说&#xff0c;可能会感到困惑&#xff0c;为什么要这样写&…...

Linux学习笔记之动静态库

相信点进这篇帖子的你一定在动静态库的学习中遇到了很多问题。笔者由于曾经囫囵吞枣地学习库的相关知识&#xff0c;导致在实际应用中漏洞百出。所以写下这篇帖子&#xff0c;为大家解答一些疑惑&#xff0c;同时也加强自己的学习印象。 一、库的理解 什么是库&#xff1f;我…...

生成运算树

目录 题目题目描述示例输入输出算法标签: 二叉树, d f s dfs dfs, 模拟, *递归下降算法思路代码*后续 A C AC AC代码 题目 题目描述 在某种脚本语言里&#xff0c;有一个形如 x(api-xn)eps 的运算表达式&#xff0c;该表达式由以下元素构成&#xff1a; 操作数&#xff1a;…...

为什么要提出Null-text Inversion

在传统扩散模型的反转过程中&#xff08;如DDIM Inversion&#xff09;&#xff0c;文本提示&#xff08;Prompt&#xff09;确实不直接影响反转过程&#xff0c;但Null-text Inversion的优化动机源于反转-重建后的图像在后续编辑时对文本的依赖性。以下分步骤详细解释&#xf…...

centos离线安装ssh

一、在有网络的环境中准备RPM包 1.在一台与离线机器相同版本和架构的CentOS系统上&#xff0c;安装必要工具&#xff1a; sudo yum install -y yum-utils 2.创建目录存放RPM包&#xff1a; mkdir /tmp/ssh_rpms 3.下载SSH相关包及其依赖 yumdownloader --resolve --destd…...

数据库安装和升级和双主配置

备份和导入数据 ./mysqldump -u root -p123321 test > test.sql rsync -av test.sql root192.168.0.212:/usr/local/mysql/ ./mysql -uroot -p test < …/test.sql sudo tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ sudo ln -sfn /usr/loca…...

React 的 useEffect 清理函数详解

React 的 useEffect 清理函数详解 useEffect 是 React 中用于处理副作用&#xff08;side effects&#xff09;的 Hook&#xff0c;清理函数&#xff08;Cleanup Function&#xff09;是 useEffect 中返回的一个函数&#xff0c;用于清理或撤销副作用。清理函数的主要目的是确…...

C++ Lambda 表达式

Lambda 表达式的完整语法如下&#xff1a; [capture](parameters) mutable -> return_type { body }[capture]&#xff08;捕获列表&#xff09;&#xff1a;指定外部变量如何被 Lambda 表达式捕获&#xff08;按值或按引用&#xff09;。 (parameters)&#xff08;参数列…...

MATLAB 中的图形绘制

一、线图 plot 函数用来创建x和y值的简单线图。 x 0 : 0.05 : 30; %从0到30&#xff0c;每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若&#xff08;x&#xff0c;y&#xff0c;LineWidth&#xff0c;2&#xff09;可变粗 xlabel("横轴标题") ylab…...

深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

目录 深度解析 Kubernetes 配置管理&#xff1a;如何安全使用 ConfigMap 和 Secret一、目录结构二、ConfigMap 和 Secret 的创建1. 创建 ConfigMapconfig/app-config.yaml&#xff1a;config/db-config.yaml&#xff1a; 2. 创建 Secretsecrets/db-credentials.yaml&#xff1a…...

【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建

本文章同步到我的个人博客网站&#xff1a;ElemenX-King&#xff1a;【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建 希望大家能使用此网站来进行浏览效果更佳&#xff01;&#xff01;&#xff01; 目录 一、异步FIFO1.1 异步FIFO的定义1.2 亚稳态1.3 异步FIFO关键技术…...

【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统

项目介绍 本课程演示的是一款 基于SpringBootVue的移动台账管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…...

C语言——函数

C语言——函数 函数的概念 函数&#xff1a;也叫子程序。C语言中的函数就是一个完成某项特定任务的一小段代码。C语言函数分类&#xff1a; 按照用户使用&#xff1a;库函数&#xff0c;自定义函数 按照参数的形式&#xff1a;无参函数&#xff0c;有参函数 按照是否有返回值…...

网络安全 | F5 WAF 黑白名单配置实践指南

关注&#xff1a;CodingTechWork 引言 在现代网络安全架构中&#xff0c;F5 Web Application Firewall (WAF) 是保护 Web 应用免受攻击的重要工具。F5 WAF 提供了强大的黑白名单功能&#xff0c;结合 Data Group 和 iRules&#xff0c;可以实现更灵活、更高效的流量控制策略。…...

黑马 redis面试篇笔记

redis主从 version: "3.2"services:r1:image: rediscontainer_name: r1network_mode: "host"entrypoint: ["redis-server", "--port", "7001"]r2:image: rediscontainer_name: r2network_mode: "host"entrypoint:…...

报错_NoSuchMethodException: cn.mvc.entity.User.<init>()

org.springframework.beans.BeanInstantiationException: Failed to instantiate [cn.mvc.entity.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: cn.mvc.entity.User.<init>() 添加一个无参的构造器即可&#xff01; pub…...

【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置

目录 1、遥控器校准 1.1、校准步骤 2、飞行模式选择&#xff0c;遥控器通道映射 2.1、配置步骤 1、遥控器校准 在校准无线电系统之前&#xff0c;必须连接/绑定接收器和发射器。绑定发射器和接收器对的过程是特定于硬件的&#xff08;有关说明&#xff0c;请参阅 RC 手册&…...

基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案

一、核心硬件架构设计‌ ‌高性能算力引擎&#xff08;RK3588 处理器&#xff09;‌ ‌异构计算架构‌&#xff1a;集成 8 核 CPU&#xff08;4Cortex-A762.4GHz 4Cortex-A551.8GHz&#xff09;&#xff0c;支持动态调频与多任务并行处理&#xff0c;单线程性能较传统四核方案…...

上岸率85%+,25西电先进材料与纳米科技学院(考研录取情况)

1、先进材料与纳米科技学院各个方向 2、先进材料与纳米科技学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、材料科学与工程25年相较于24年上升10分&#xff0c;为290分 2、材料与化工&#xff08;专硕&#xff09;25年相较于24年下降20分&#xff0c;为…...

10天学会嵌入式技术之51单片机-day-7

第十六章 UART通信 16.1 UART 概述 16.1.1 前置基础 想要理解和使用 UART&#xff0c;需要先了解一些通讯领域的术语&#xff0c;如下 。 &#xff08;1&#xff09;串行通讯和并行通讯 串行通讯和并行通讯是数据传输的两种主要方式&#xff0c;两者的区别如下。 &#xff…...

w~视觉~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327888 #几个论文 Fast Charging of Energy-dense Lithium-ion Batteries Real-time Short Video Recommendation on Mobile Devices Semantic interpretation for convolutional neural networks: What makes a ca…...

AI在论文评审中的应用与工具推荐

一、AI在论文评审中的核心应用场景 内容质量评估与逻辑校验 • 核心论点识别&#xff1a;AI可快速定位论文核心创新点&#xff0c;并验证其与文献综述、实验数据的逻辑一致性&#xff08;如知网研学的“文献矩阵分析”功能&#xff09;。 • 方法论合理性检测&#xff1a;自动识…...