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

数据结构(顺序表)JAVA方法的介绍

前言

在 Java 中,集合类(Collections)是构建高效程序的核心组件之一,而 List 接口作为集合框架中的重要一员,是一个有序、可重复的元素集合。与 Set 接口不同,List 保证了元素的顺序性,并允许存储重复的元素。List 接口在实际开发中应用广泛,尤其适用于需要按索引访问、频繁修改和管理元素顺序的场景。

无论是在处理数据集合、动态数组,还是实现类似链表的数据结构时,List 都提供了灵活的解决方案。而它的丰富方法集合,可以帮助开发者高效地操作数据,包括添加、删除、查找、修改元素等常见操作。

在这篇博客中,我们将深入分析 List 接口中的所有方法,并通过代码示例帮助大家理解每个方法的用法及其背后的实现原理。通过掌握这些方法,你将能更好地在开发中利用 List,提升代码的可读性与执行效率。

接下来,我们将逐一介绍 List 接口的核心方法,并探讨如何根据不同的场景和需求灵活选择适合的操作。无论你是 Java 新手还是有一定经验的开发者,掌握这些基本操作都能为你的编码之路奠定坚实的基础。

让我们从最基本的 add 方法开始,逐步探索更多功能强大的方法吧!

1. List接口的介绍

1.1什么是 List 接口?

List 是 Java 集合框架中的一个接口,表示一个有序的集合,它允许存储重复的元素。与其他集合类型如 Set 不同,List 保证元素的顺序性,并提供了通过索引来访问元素的功能。这意味着,List 中的每个元素都有一个确定的位置(索引),可以通过索引快速访问和操作元素。List 接口广泛应用于需要按顺序处理数据的场景,如存储一系列任务、排列顺序的元素或管理动态数据。

1.2List 在 Java 集合框架中的作用

List 接口是 Java 集合框架中非常重要的一部分,它继承自 Collection 接口,并且是 Iterable 接口的实现类。它的作用是提供一种容器,用来存储数据元素,支持根据索引顺序访问元素。由于 List 保留元素的插入顺序,它广泛应用于以下几类场景:

  • 动态数组:当需要动态扩展数组的大小时,List 可以作为替代数组的容器,尤其是在大小未知或频繁改变的情况下。
  • 数据存储与排序:需要按顺序存储并且可能需要按照某种规则排序的元素。
  • 按顺序访问:当操作数据需要按顺序进行处理时,List 提供了高效的随机访问和迭代能力。

1.3继承关系:ListCollectionIterable

List 接口属于 Java 集合框架的一部分,它继承自 Collection 接口。可以理解为:

  • ListCollection 的一种扩展,提供了更多具体的方法,例如按索引访问元素(get(int index))以及在列表中插入元素(add(int index, E element))。
  • Collection 是 Java 集合框架的根接口,定义了基本的集合操作,如添加元素、删除元素、检查集合大小等。
  • Iterable 是所有集合类的父接口,提供了一个 iterator() 方法,用于获取一个可以遍历集合元素的迭代器。

这种继承关系使得 List 拥有 Iterable 的遍历能力和 Collection 的常规集合操作,同时又提供了 List 特有的按位置操作元素的能力。

1.4常见实现类:ArrayList, LinkedList

List 接口有多个常见的实现类,最常用的包括:

  • ArrayList:基于动态数组实现,提供快速的随机访问(根据索引访问元素),但在插入和删除元素时,可能需要移动数组中的元素,性能较低。
  • LinkedList:基于双向链表实现,支持高效的插入和删除操作,但随机访问元素的性能较差,需要遍历链表。
  • VectorStack:这两个类也是 List 的实现类,Vector 基于动态数组,支持线程安全,但性能较差;StackVector 的一个子类,专门用于栈结构的操作。
  • CopyOnWriteArrayList:线程安全的 List 实现类,适用于多线程环境,但其性能在频繁修改操作时较低。

1.5为什么学习 List 接口的方法?

学习 List 接口的方法,能够帮助你更好地理解如何在实际开发中处理有序集合。掌握 List 的基本操作不仅对理解其他集合类(如 SetMap)有帮助,还能在以下场景中提升开发效率:

  • 数据管理List 非常适合用于管理一组有序的数据,如排好序的数字列表、学生成绩、任务队列等。
  • 顺序处理:在许多实际应用中,数据处理需要按顺序进行,List 提供了对数据的随机访问、排序、修改等强大功能。
  • 高效操作:理解 List 中的常见操作(如增、删、查、改)能够帮助你编写更高效、易于维护的代码,尤其是在涉及动态数据结构时。

1.6实际开发中的应用场景

  • 任务队列管理:任务队列或调度程序经常使用 List 来存储和管理任务,以便按顺序执行。
  • 图像处理:在图像处理、图像编辑等领域,List 被用来存储像素值或变换操作,支持按索引访问和修改。
  • 数据持久化:在数据库管理系统(如 ORM 框架)中,List 可用于存储查询结果集合,并根据需要进行排序、更新等操作。
  • 用户输入的历史记录:某些应用程序(如文本编辑器、命令行工具)需要记录用户的历史操作,可以通过 List 保存历史记录,方便用户查看和回退。

1.7与其他集合类的对比(Set, Map

  • List vs SetList 允许重复元素,并且保证元素的顺序,而 Set 不允许重复元素,且没有顺序性。选择 List 适合需要保留顺序并允许重复的场景,选择 Set 则适合去除重复的元素。
  • List vs MapMap 是一个键值对集合,通常用于根据某个键来快速查找对应的值。List 更适用于需要按顺序访问单一元素的情况,而 Map 用于键值对存储和快速检索数据。

2.List接口的方法:

2.顺序表与 List 接口的关系

在 Java 中,顺序表(也叫动态数组)和 List 接口有着紧密的关系。理解它们之间的关系对于掌握集合框架的使用至关重要。

2.1 顺序表的概念

顺序表是一个基于数组实现的线性表结构,它的元素按照一定顺序排列,可以通过索引直接访问。通常,顺序表具有以下特点:

  • 存储方式:使用连续的内存空间(通常是数组)来存储元素。
  • 访问方式:支持通过索引访问元素,时间复杂度为 O(1)。
  • 插入/删除:在数组末尾插入元素是高效的,但在数组中间插入或删除元素时,需要移动其他元素,因此时间复杂度为 O(n)。
  • 大小动态变化:顺序表的容量通常是动态扩展的,超出容量时,数组会进行扩容。

在 Java 中,顺序表通常由 ArrayList 来实现,ArrayListList 接口的一个常见实现类。

2.2 List 接口的概念

List 是 Java 集合框架中的一个接口,表示一个有序的集合。与 Set 类似,List 也可以存储多个元素,但与 Set 不同,List 允许重复元素并且保留元素的插入顺序。List 提供了对集合元素的多种操作,包括:

  • 按索引访问元素(get(int index)
  • 在指定位置插入元素(add(int index, E element)
  • 删除指定位置的元素(remove(int index)

List 是一个非常广泛的接口,包含多个实现类,例如:

  • ArrayList:基于动态数组实现的顺序表,适用于频繁读取和偶尔修改的场景。
  • LinkedList:基于双向链表实现,适用于频繁插入和删除的场景。

 2.3 顺序表与 List 接口的关系

  1. 顺序表是 List 的一种实现方式
    • ArrayList 是 Java 中实现 List 接口的最常用类之一,它实际上就是一个顺序表。ArrayList 使用一个动态数组来存储元素,因此它可以通过索引高效地访问元素,符合顺序表的基本特性。
    • 顺序表 是一种具体的数据结构,而 List 接口 是一个更抽象的定义。ArrayList 实现了 List 接口,因此 ArrayListList 接口的一种实现,基于动态数组实现了 List 提供的各种操作。
  2. List 接口定义了顺序表的行为
    • List 接口的定义包括了顺序表所需的元素存取和修改操作。例如,add(int index, E element) 方法允许在指定位置插入元素,这正是顺序表常见的操作。
    • List 接口通过继承自 Collection 接口,定义了一些基础的集合操作,如添加、删除、查询等。这些操作也都适用于顺序表(例如,ArrayList)。
  3. ArrayList 是最常用的顺序表实现
    • 在 Java 中,ArrayList 是实现 List 接口最常用的类,它就是基于顺序表(动态数组)实现的。ArrayList 会自动扩展数组的大小,当元素数量增加时,会动态调整数组的容量。因此,在大多数情况下,当我们谈论顺序表时,实际指的就是 ArrayList
  4. List 接口和顺序表的区别
    • List 接口 是一个抽象的接口,它不仅仅限制于顺序表(ArrayList)的实现,也包括了基于链表的实现(如 LinkedList)。
    • 顺序表 是一个具体的数据结构,专门指代基于数组的实现,它的实现方式是连续的内存空间。List 接口则更为抽象,允许多种实现方式(例如 ArrayListLinkedList),并没有固定的实现方式。

3. 讲解JAVA顺序表中的方法

List<String> list1 = new ArrayList<>();

这里面标红的部分表示指定泛型使用 String 可以确保你在操作 list1 时,只能将 String 类型的元素添加到 list1 中,而不能插入其他类型的对象。

3.1. 添加元素的方法 (add)

这些方法用于向顺序表中添加元素。

  • add(E e)

    • 功能:将指定元素添加到列表的末尾。
    • 返回值true,因为 ArrayList 是可变的(始终成功添加)
 

3.1.2 add(int index, E element)

  • 功能:将指定元素插入到列表的指定位置。如果该位置已有元素,原元素会向后移动。
  • 返回值:无。

3.1.3addAll(Collection<? extends E> c)

  • 功能:将指定集合中的所有元素添加到当前列表的末尾。
  • 返回值true,表示是否成功执行操作。
  • 示例

3.1.4 addAll(int index, Collection<? extends E> c)

  • 功能:将指定集合中的所有元素插入到当前列表的指定位置。
  • 返回值true,表示是否成功执行操作。
  • 示例

3.2. 删除元素的方法 (remove)

这些方法用于删除元素。

  • 3.2.1 remove(Object o)

    • 功能:删除列表中首次出现的指定元素。如果列表中有多个相同元素,只删除第一个匹配的元素。
    • 返回值:如果元素存在,返回 true;否则返回 false
    • 示例
       

3.2.2 remove(int index)

  • 功能:删除指定索引位置的元素,所有后续元素都会向前移动。
  • 返回值:返回被删除的元素。
  • 示例

3.2.3 removeAll(Collection<?> c)

  • 功能:删除当前列表中所有包含在指定集合中的元素。
  • 返回值true 如果列表中确实删除了元素;false 如果没有删除任何元素。
  • 示例
     

3.2.4removeIf(Predicate<? super E> filter)

  • 功能:按条件删除列表中的元素,使用 Java 8 的 Predicate 表达式。
  • 返回值true 表示至少删除了一个元素;false 表示没有元素被删除。
  • 示例

3. 3  查询和访问元素的方法

  • 3.3.1 get(int index)

    • 功能:返回列表中指定索引位置的元素。
    • 返回值:指定索引位置的元素。
    • 示例

3.3.2 indexOf(Object o)

  • 功能:返回列表中指定元素第一次出现的索引,如果不存在则返回 -1。
  • 返回值:指定元素的索引位置,或者 -1(如果不存在)。
  • 示例
     

3.3.3 contains(Object o)

  • 功能:检查列表中是否包含指定元素。
  • 返回值:如果包含,返回 true;否则返回 false
  • 示例

3.3.4 size()

  • 功能:返回列表中元素的数量。
  • 返回值:当前列表中的元素个数。
  • 示例

3.4. 修改元素的方法 (set)

  • set(int index, E element)
    • 功能:替换指定位置的元素,返回原位置的元素。
    • 返回值:返回被替换的元素。
    • 示例

3.5  清空和检查列表的方法

  • 3.5.1 clear()

    • 功能:移除列表中的所有元素。
    • 返回值:无。
    • 示例

3.5.2 isEmpty()

  • 功能:检查列表是否为空。
  • 返回值:如果列表为空,返回 true;否则返回 false
  • 示例
     

3.6  子列表和转换方法

  • .3.6.1 subList(int fromIndex, int toIndex)

    • 功能:返回列表中的一个子列表,包含从 fromIndextoIndex-1 的元素。
    • 返回值:一个新的 List,该列表是原列表的一个视图。
    • 示例

3.6.2 toArray()

  • 功能:将列表转换为数组,返回 Object[] 类型的数组。
  • 返回值:一个包含列表元素的数组。
  • 示例

结语

顺序表,作为一种重要的线性数据结构,在 Java 集合框架中得到了广泛的应用。特别是基于动态数组实现的 ArrayList,它提供了高效的随机访问、动态扩容等功能,使得在实际开发中处理大量数据时更加灵活和高效。

通过本文的讲解,我们深入了解了顺序表的核心概念、实现原理以及常见的操作方法。无论是在元素添加、删除、查找,还是在容量管理、扩容机制的背后,顺序表都以其简单而高效的特性,成为了许多应用场景的首选数据结构。

顺序表的优势:

  • 高效的索引访问:ArrayList 基于数组实现,支持 O(1) 时间复杂度的随机访问。
  • 动态扩容:随着元素的增加,ArrayList 能够自动调整其内部数组的大小,保证数据的存储需求。
  • 灵活性与性能:适用于读操作频繁、插入和删除操作较少的场景,能够提供较好的性能。

顺序表的局限性:

  • 插入和删除操作的性能相对较差,尤其是对中间位置的插入和删除,因为需要移动元素。
  • 在容量较小或扩容频繁的情况下,可能会影响性能。

虽然顺序表有其局限性,但它的优势和广泛应用,使得 ArrayList 成为 Java 集合框架中最常用的数据结构之一。在需要频繁访问元素、需要灵活动态调整大小时,顺序表无疑是一个非常合适的选择。

了解顺序表的实现与操作,有助于我们在开发中做出更合理的选择。虽然 Java 中还提供了其他集合类(如链表 LinkedList、哈希表 HashMap 等),但顺序表作为一种基础数据结构,它在开发中的重要性和实用性不容忽视。

随着技术的不断发展,新的数据结构和算法也在不断涌现,但掌握基本的顺序表实现依然是编写高效 Java 代码的基础。希望这篇文章帮助你更好地理解顺序表,并能在实际项目中灵活应用,提升你的开发效率和代码质量。

相关文章:

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中&#xff0c;集合类&#xff08;Collections&#xff09;是构建高效程序的核心组件之一&#xff0c;而 List 接口作为集合框架中的重要一员&#xff0c;是一个有序、可重复的元素集合。与 Set 接口不同&#xff0c;List 保证了元素的顺序性&#xff0c;并允许存…...

电商商品详情API接口(item get)数据分析上货

电商商品详情API接口&#xff08;item get&#xff09;在数据分析与商品上货方面发挥着重要作用。以下是对这两个方面的详细探讨&#xff1a; 一、数据分析 数据源获取&#xff1a; 商品详情API接口提供了丰富的数据源&#xff0c;包括商品的标题、价格、库存、描述、图片、用…...

supervisor使用详解

0、介绍 supervisor 是一个用 Python 编写的客户端/服务器系统&#xff0c;它允许用户在类 UNIX 操作系统&#xff08;如 Linux&#xff09;上监控和控制进程。supervisor 并不是一个分布式调度框架&#xff0c;而是一个进程管理工具&#xff0c;它可以用来启动、停止和重启程…...

结合开源低代码-microi吾码 阿里云建桶,以及minio文件转移阿里云oss

前言 最近在工作中&#xff0c;碰到一开始一个小程序的照片和视频都放在公司的minio服务器上存储。但日积月累的&#xff0c;而且这个客户的访问量也大&#xff0c;照片和视频每天的存储空间也很大&#xff0c;这每天也是比不菲的费用&#xff0c;而且也会加慢后台的访问速度。…...

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…...

关于SQL注入的面试题及经验分享

Q&#xff1a;简述数据库的存储引擎 A&#xff1a;数据库存储引擎是数据库底层软件组织&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不…...

ISP(Image Signal Processor)——HDR技术总结

传统多帧融合技术 拍摄一系列不同曝光时长的图像帧&#xff08;LDR&#xff09;&#xff0c;然后使用融合算法进行融合成HDR图像。 融合算法可以分为两种 基于照度图估计的融合 基于照度估计需要拟合相机响应函数&#xff0c;详细可以参考如下论文&#xff1a; Recovering H…...

Python字符串及正则表达式(十):字符串常用操作、字符串编码转换

前言&#xff1a;在编程的世界里&#xff0c;字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果&#xff0c;还是火车站的列车时刻表&#xff0c;这些信息最终都需要以文本的形式呈现给用户。这些文本的背后&a…...

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议&#xff0c;建立在TCP/IP协议栈之上&#xff0c;用于客户端&#xff08;如浏览器&#xff09;和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…...

Codeforces Global Round 27的C题

题目大意 给定一个n,n>5 ans0 ans&a1|a2&a3|a4&a5...an,数组a是一个排列 下标是奇数让ans对其进行&操作,否则进行|操作,求ans能达到的最大值. 分奇偶来讨论,在n为奇数的情况下,最后一次操作是|,在n为偶数的情况下,最后一次操作是&. n二进制最高位的计算…...

【Linux】Nginx一个域名https一个地址配置多个项目【项目实战】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…...

第36次CCF计算机软件能力认证 梦境巡查

梦境巡查 刷新 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录 题目背景 传说每当月光遍布西西艾弗岛&#xff0c;总有一道身影默默守护着居民们的美梦。 题目描述 梦境中的西西艾弗岛由 &#xfffd;1n1 个区域组成。梦境…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种Boosting算法&#xff0c;它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重&#xff0c;使那些被错误分类的样本在后续的训练中得到…...

传统零售商商业升级的核心动机及与互联网业务融合的探索——以 AI 智能名片 S2B2C 商城小程序源码为例

摘要&#xff1a;本文旨在探讨传统零售商尝试商业升级的核心动机&#xff0c;并以 AI 智能名片 S2B2C 商城小程序源码为典型案例&#xff0c;分析互联网业务模式如何助力传统零售商转型。通过剖析传统零售增长模式的局限以及互联网业务在增长速度、迭代试错和用户需求洞察方面的…...

飞牛 fnos docker镜像部署OpenSpeedtest宽带网速测试教程

penSpeedTest是一个跨平台的网络测速应用&#xff0c;支持不同操作系统的浏览器&#xff0c;无需安装额外软件或插件。您可以在iPhone、iPad、Android设备、Windows和Linux系统的电脑、手机和平板上直接测试设备与NAS之间的宽带速度。 通过这个可以排查出设备与NAS之间的传输速…...

【C++】list

OK&#xff0c;最近浅浅学习了STL的list&#xff0c;有兴趣不妨垂阅&#xff01; 目录 1.constructor 2.assign 3.insert 4.erase 5. reverse 6.swap 7.merge 8.unique 9.splice 10.小知识 同样的&#xff0c;使用list 需要包含一个头文件<list>。<list&g…...

keepalive的高可用集群

一、keepalived概述 1.keepalive的工作原理 keepalive是专门为了lvs集群开发出来的&#xff0c;但是适用场景不仅仅局限于lvs。而且keepalive为后台的真实服务器做了一个健康检查&#xff0c;当服务不可用时&#xff0c;会自动的移除ipvs的转发策略&#xff0c;服务恢复时&…...

HTTP 协议报文结构 | 返回状态码详解

注&#xff1a;本文为 “HTTP 历史 | 协议报文结构 | 返回状态码” 相关文章合辑。 未整理去重。 HTTP 历史 wangjunliang 最后更新: 2024/3/16 上午10:29 超文本传输协议(英语:HyperTextTransferProtocol,缩写:HTTP)是 万维网(World Wide Web)的基础协议&#xff61;自 蒂姆…...

如何保证开源AI呼入机器人和AI呼出机器人的服务质量?

如何保证开源AI呼入机器人和AI呼出机器人的服务质量&#xff1f; 确保开源AI呼入机器人和AI呼出机器人的服务质量是企业成功部署这些智能系统的关键。高质量的服务不仅能够提高客户满意度&#xff0c;还能增强企业的市场竞争力。以下是实现这一目标的几个关键策略和技术措施&a…...

C++day7

#include <iostream>using namespace std; template <class T> class mylist{ public:struct Link{T val;Link* next;Link* front;};//增void insert(T val);//删void remove(T val);//改mylist& operator[](int index);//排序void Sort();//遍历void show();/…...

docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)

一、基本概念 Redis:即 "Remote DIctionary Server" &#xff0c;翻译为“远程字典服务器”。从字面意义上讲&#xff0c;它指的是一个远程的字典服务&#xff0c;意味着它是一个可以远程访问的服务&#xff0c;主要用于存储键值对&#xff08;key-value pairs&…...

第8章 搬移特性

8.1 搬移函数 模块化是优秀软件设计的核心所在&#xff0c;好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序&#xff0c;我得保证互相关联的软件要素都能集中到一块&#xff0c;并确保块与块之间的联系易于查找、直观易懂。同时&#xff0c…...

[IT项目管理]项目时间管理(本章节3w字爆肝)

七.项目时间管理 7.1 项目进度的重要性 为什么要重视项目进度&#xff1a;在项目进行的过程之中会遇到变故。但是不论项目中发生了什么&#xff0c;时间总是在流逝&#xff0c;就可能会导致项目不可以在规定的时间完成。 7.2可能影响项目进度的因素 有员工离职个人的工作方…...

k8s中设置annotation的方法总结

k8s中设置annotation的方法总结 annotation是什么 在 Kubernetes 中&#xff0c;Annotations 是一种用于向 Kubernetes 对象附加非标识性元数据的机制。 annotation有什么用 annotation与 Labels 类似&#xff0c;但有一些关键区别和特定用途。 常用于存储与对象相关的配置…...

第19天:信息收集-Web应用源码获取闭源备份开发泄漏WebPack打包资源搜索ICO定位

#知识点 1、信息收集-Web应用-源码获取-已知指纹&未知指纹 2、信息收集-Web应用-源码获取-泄漏问题&发现指纹 一、参考文章&#xff1a; https://www.secpulse.com/archives/124398.html https://mp.weixin.qq.com/s/QgLDdaefXlZtvlSiFQShZw 二、源码泄漏原因&#xff…...

uniapp小程序的锚点定位(将页面滚动到目标位置)

小程序中&#xff0c;a页面跳转到b页面&#xff0c;跳转后滚动定位到b页面的特定位置。 1.uni.pageScrollTo传递一个scrollTop参数可以滚动到特定位置。2.可以通过 uni.createSelectorQuery()等获取定位元素的位置信息。3.uni.getSystemInfoSync()获取设备的导航栏和状态栏高度…...

py脚本部署到服务器定时启动

py脚本部署到服务器定时启动 一、准备好你的脚本二、把脚本放到服务器三、在服务器创建脚本所需要的环境1、安装 Miniconda&#xff08;如果不想安装 Anaconda 或 Miniconda&#xff0c;可以直接使用 Python 的venv模块创建虚拟环境&#xff0c;但安装 Conda 会更方便管理不同版…...

相机不动,机构动作----Hands Eyes

最近在研究 手眼标定&#xff0c;发现大家都需付费&#xff0c;搞啥子&#xff0c;说好的开源。。。 以相机在上固定不动&#xff0c;机械手为 EPSON_Robot 为例&#xff0c;详细的一步一步实例操作指引 EPSON_Robot 的192.168.0.1 2004 Server 详细操作步骤 1. 启动程序 运…...

Jdk1.7到Jdk1.8 HashMap 发生了什么变化(底层)

从JDK 1.7到JDK 1.8&#xff0c;HashMap在底层实现上发生了显著的变化&#xff0c; 主要体现在数据结构、链表插入方式、哈希算法、扩容机制以及并发性方面。 以下是具体的变化点&#xff1a; 1. 数据结构的变化 JDK 1.7&#xff1a;HashMap的底层数据结构是数组单向链表。…...

微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods

4.2 Direction Fields and Numerical Methods - Calculus Volume 2 | OpenStax...

java后端环境配置

因为现在升学了&#xff0c;以前本来想毕业干java的&#xff0c;很多java的环境配置早就忘掉了&#xff08;比如mysql maven jdk idea&#xff09;&#xff0c;想写个博客记录下来&#xff0c;以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…...

Unity UI Button 事件优先级调整技术方案

Unity UI Button 事件优先级调整技术方案 在 Unity 项目开发过程中&#xff0c;针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法&#xff0c;旨在为开发者提供全面且专业的技术参考。 一、基于反射机制的事件插入方…...

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…...

PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环

效果 PHP代码 public function demo($params){function moveNext($arr){$length count($arr);$lastElement $arr[$length - 1];for ($i $length - 1; $i > 0; $i--) {$arr[$i] $arr[$i - 1];}$arr[0] $lastElement;return $arr;}function moveAndReplace($array, $from…...

keepalived的高可用集群

keepalived的概念 keepalived的工作原理 基于vrrp实现的调度器高可用方案 keepalived的配置实验 先在调度服务器上安装keepalived和ipvsadm apt -y install keepalived ipvsadm 复制keepalived的配置文件到/etc/keepalived/目录下 cp /usr/share/doc/keepalived/samples/keep…...

基于单片机的农田灌溉系统(论文+源码)

1.系统设计 本系统主要实现如下目标&#xff1a; 1&#xff0e;可以实时监测土壤湿度&#xff1b; 2&#xff0e;土壤湿度太低时&#xff0c;进行浇水操作&#xff1b; 3&#xff0e;可以按键设置湿度的触发阈值&#xff1b; 4. 可以实现远程操控 5&#xff0e;可以实现手…...

技术文档分享——绘制精准航海图:技术文档规划、表达与维护的艺术

绘制精准航海图&#xff1a;技术文档规划、表达与维护的艺术 方向一&#xff1a;技术文档的规划布局从技术文档的规划布局入手&#xff0c;探讨如何确定文档的整体架构&#xff0c;如章节设置、逻辑顺序等&#xff0c;以确保信息呈现的系统性与连贯性。1. 确定文档的目标和读者…...

43124123

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

Pytorch应用实战(1)- 基于YOLO的视频人脸马赛克处理

免费链接: Blogger(需翻Q), Github 文章目录 本文介绍给图片的人脸打码给视频的人脸打码本文介绍 YoloV11(Github)提供了非常方便的API帮助用户实现目标检测(detect)、语义分割(segement)、肢体识别(Pose)等功能。 本文将基于YoloV11的目标检测来实现一个视频人脸马…...

【Prompt Engineering】1.编写 Prompt 的原则

一、环境配置 使用 OpenAI 的 ChatGPT API&#xff0c;需要有 API_KEY&#xff0c;并安装 OpenAI 库。安装命令&#xff1a;pip install openai 和 pip install zhipuai。配置方法&#xff1a;直接设置 openai.api_key 或通过环境变量设置。 二、两个基本原则 2.1 原则一&am…...

非vip版opengl

环境搭建 安装编译器和构建工具&#xff1a;在 Windows 上可以使用 Visual Studio&#xff0c;在 Linux 上可以使用 GCC 等编译器。确保编译器已正确安装并配置好环境变量。安装 OpenGL 库和相关辅助库&#xff08;以 GLUT 为例&#xff09;&#xff1a; Windows&#xff1a; 下…...

【深入理解Nginx】

深入理解Nginx 介绍 Nginx&#xff08;发音为 “engine-x”&#xff09;是一款高性能的HTTP服务器和反向代理服务器&#xff0c;同时支持IMAP/POP3协议。它以其高并发处理能力、稳定性、丰富的功能集、简单的配置和低资源消耗而受到广泛欢迎。Nginx特别适合提供静态文件服务、…...

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…...

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍

Microi吾码&#xff5c;开源低代码.NET、VUE低代码项目&#xff0c;表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么&#xff1f;四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…...

css常用属性有哪些

在上篇文章我们知道了利用css选择器来对HTML进行简单装饰&#xff0c;就像做word文档一样&#xff0c;需要对哪一段落修改格式&#xff0c;就需要先选中&#xff0c;css选择器就是这意思。这格式如何修改&#xff0c;怎么放大字体&#xff0c;怎么加粗&#xff0c;怎么修改背景…...

Java设计模式 —— 【结构型模式】装饰者模式详解

文章目录 前言结构说明案例演示小结静态代理和装饰者的区别 前言 在日常生活中&#xff0c;我们常会遇到一种场景&#xff1a;去快餐店吃饭&#xff0c;里面琳琅满目的主食&#xff0c;还有各式各样的配菜作为消费者&#xff0c;只管挑选就行&#xff0c;但是如果让我们来设计…...

简道云与金蝶云星空无缝集成的技术探索

简道云数据集成到金蝶云星空的技术案例分享 在企业信息化建设中&#xff0c;数据的高效流动和准确对接是关键环节。本文将聚焦于一个实际运行的系统对接集成案例&#xff1a;简道云-其他入库单--->金蝶-其他入库单&#xff0c;通过轻易云数据集成平台实现这一目标。 案例背…...

单片机原理及应用笔记:单片机中断系统原理与项目实践

高金鹏&#xff1a;男&#xff0c;银川科技学院计算机与人工智能学院&#xff0c;2022级别计算机科学与技术本科生&#xff0c;单片机原理及应用课程第六组。 指导教师&#xff1a;王兴泽 电子邮件&#xff1a;高金鹏3535558665qq.com 个人CSDN:暴躁的海绵宝宝 暴躁的海绵宝…...

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本&#xff1a;4.36 问题介绍&#xff1a; 我的项目是公司的项目&#xff0c;需要在H5端使用百度地图&#xff0c;使用vue-cli创建的uniapp&#xff0c;就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…...

CTFHub ssrf

第一关&#xff08;内网访问&#xff09; 尝试访问位于127.0.0.1的flag.php吧 第二关(伪协议读取文件) 尝试去读取一下Web目录下的flag.php吧 1.首先尝试http://127.0.0.1/flag.php 2.查看页面源代码 3.根据提示输入file:///var/www/html/flag.php 4.查看页面源代码 第三关&…...