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

LinkedList源码分析

1. LinkedList初始化

public class LinkedListTest {public static void main(String[] args) {LinkedList<String> list = new LinkedList<String>();// 新增list.add("a");list.add("b");list.add("c");list.add("d");list.add(2, "e");// 删除list.remove(1);// 修改list.set(1, "d");// 查询list.get(0);}
}

在创建LinkedList时,可以看到无参构造方法里面没有任何代码,所以创建时,只是创建一个空的集合。

在这里插入图片描述

往上面翻可以看到这里有三个参数,分别是size,first和last。first和last分别是头结点和尾结点,说明LinkedList是一个双向链表。

在这里插入图片描述

查看结点类,可以看到里面有数据item,下一个节点next,上一个结点prev,也可以看出是一个双向的结点。

在这里插入图片描述

2. 新增元素

新增元素时,先进入add()方法,并将需要添加的元素作为参数传入,然后执行linkLast()方法。

在这里插入图片描述

首先先将last赋值给一个临时变量l,然后去创建一个新的节点,即new Node<>(l, e, null),然后将l,e,null传入进去。

在这里插入图片描述

下面就是创建新结点的过程,由于是创建LinkedList后第一次新增元素,因此上一个结点和下一个结点都为null,元素item则为新增的元素"a"。

在这里插入图片描述

创建好新结点newNode之后,如果是空链表,则直接将新节点赋值给first,如果之前存在元素,则将新节点赋值给l.next,即上一个元素指向新创建的元素。

在这里插入图片描述

这样成功的新增了一个元素。

3. 插入元素

还有一种在指定位置插入元素,即示例中的list.add(2, “e”)。

凡是在某个位置进行操作时,第一步都是检验下标是否越界。这里下标没有越界,且index为2,不等于size,因此直接执行linkBefore(element, node(index))方法,从这个方法可以看出,就是element会去创建一个新的结点,然后新节点的的next指向下标为2的这个结点。

在这里插入图片描述

这里先进入node(index)这个方法进行查看,这里会有一个if判断,因为LinkedList是一个双向链表,不管是从头结点出发,还是从尾结点出发,都可以找到链表中的所有元素,但是链表在查找元素时,需要一个个的寻找,因此这里为了节省查找时间,先根据下标判断当前元素和size / 2的大小关系,如果index < size / 2, 则说明靠近头结点,从头结点开始寻找更为快速;反之如果index > size / 2, 则说明靠近尾结点,从尾结点开始寻找更为快速。我这里size为4,然后是在2这个位置插入元素,计算之后2 > 4 / 2为false,因此从尾结点开始寻找。

在这里插入图片描述

这里进去之后就和新增是差不多的操作,先记录下succ节点的上一个结点,结合上面我们的分析,这里的succ其实是下标为2的结点。然后根据插入的元素创建一个新的结点newNode,可以看出新结点的上一个结点为succ节点的上一个结点,元素为e,下一个结点为succ。
接着将succ的上一个结点指向新结点,然后进行判断pred是否为null,这里不为null,则将pred的下一个结点指向新结点。文字看起来可能比较绕,下面画了一张图进行分析。

在这里插入图片描述
在这里插入图片描述

4. 修改元素

对指定下标的元素进行修改,即示例中的list.set(1, “d”)。
进入到set()方法之后,检验下标如果没有越界,则进行下一步。

在这里插入图片描述

这里的node(index)方法,依然和上面在插入元素时的方法一样,因此直接跳过。

在这里插入图片描述

这里的修改操作和ArrayList中的修改是类似的,也是将当前位置的元素赋值给oldVal,然后再将需要修改的值element赋值给x的元素值。最后将oldVal返回。

在这里插入图片描述

5. 删除元素

对指定下标的元素进行删除,即示例中的list.remove(1)。
进入到remove()方法之后,如果下标没有越界,则进行下一步unlink(node(index))操作,由于node(index)方法已经介绍过了,因此直接看
unlink()方法。

在这里插入图片描述

进入到unlink()方法之后,可以看到这里先获取到要删除节点x的元素,下一个节点和上一个结点。然后进行两个判断,

  1. 首先判断上一个结点是不是为null:
    a. 如果当前结点的上一个结点为null,说明这是第一个结点,直接将下一个节点作为头结点;
    b.如果当前结点的上一个结点不为null,则说明之前还有结点,那么就是将上一个结点的next指向下一个元素,并将当前元素的上一个结点赋值为null。
  2. 其次判断下一个结点是不是为null:
    a. 如果当前结点的下一个结点为null,说明这是最后一个结点,直接将上一个结点作为尾结点;
    b. 如果当前结点的下一个结点不为null,则说明之后还有结点,那么就是将下一个结点的prev指向上一个元素,并将当前元素的下一个结点赋值为null。

这样就完成了删除操作。

在这里插入图片描述

相关文章:

LinkedList源码分析

1. LinkedList初始化 public class LinkedListTest {public static void main(String[] args) {LinkedList<String> list new LinkedList<String>();// 新增list.add("a");list.add("b");list.add("c");list.add("d");l…...

OpenAI Codex 加入Agent编程工具新阵营

上周五&#xff0c;OpenAI推出了一款名为Codex的新型编程系统&#xff0c;该系统能够通过自然语言命令执行复杂的编程任务。Codex标志着OpenAI正式进军正在形成的代理编程工具新阵营。 从GitHub早期的Copilot到当代的Cursor和Windsurf等工具&#xff0c;大多数AI编程助手都是作…...

AMBA三种总线详解并比较

AMBA三种总线详解并比较 AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;是 ARM 公司推出的片上总线标准&#xff0c;旨在为 SoC&#xff08;片上系统&#xff09;提供高效、灵活的通信架构。 一、总线详解 1. AHB&#xff08;Advanced High-perform…...

国产视频转换LT6211UX:HDMI2.0转LVDS/MIPI芯片简介,支持4K60Hz

1. LT6211UX HDMI2.0信号输入 支持HDMI2.0b, HDMI1.4和DVI1.0 支持HDCP2.2和HDCP1.4 数据速率高达6Gbps 自适应接收机均衡 支持4k60Hz 支持的3D格式&#xff1a; 对于HDMI -> LVDS&#xff1a; 直接3D输出 2路2D L/R输出 对于HDMI -> MIPI&#xff1a; 框架包装&#x…...

在nextjs项目当中使用wagmi连接MetaMask SDK

Wagmi 是一个为以太坊和 EVM 兼容链构建的 React Hooks 库,专为简化 Web3 应用开发而设计。它提供了一组强大且类型安全的工具,使开发者能够更方便地与钱包(如 MetaMask、WalletConnect 等)和智能合约进行交互。 Wagmi 的全称其实并不是一个传统意义上的缩写,它源自加密社…...

SAP-ABAP:SAP的`TRY...CATCH` 异常处理机制详解

一、异常处理架构与核心机制 1. 异常分类与层次结构 异常类型触发机制处理要求典型子类CX_STATIC_CHECK编译器强制检查(必须声明或捕获)必须显式处理CX_SY_ZERODIVIDE(除零错误)CX_DYNAMIC_CHECK运行时检查(若未处理则触发运行时错误RESUMABLE_FAILURE)推荐显式处理CX_S…...

HarmonyOS NEXT~鸿蒙系统与Uniapp跨平台开发实践指南

HarmonyOS NEXT&#xff5e;鸿蒙系统与Uniapp跨平台开发实践指南 引言&#xff1a;鸿蒙与Uniapp的融合价值 华为鸿蒙系统(HarmonyOS)作为新一代智能终端操作系统&#xff0c;其分布式能力与跨设备协同特性为开发者带来了全新机遇。而Uniapp作为流行的跨平台应用开发框架&…...

python 提交命令 到远程windows中

在Python中&#xff0c;你可以使用多种方式来提交命令到远程Windows机器上。最常见的方法是通过SSH协议&#xff08;使用paramiko库&#xff09;或者通过Windows远程管理工具如WinRM&#xff08;使用python-winrm库&#xff09;。 使用Paramiko进行SSH连接 Paramiko是一个Pyth…...

【520 特辑】用 HTML/CSS/JavaScript 打造浪漫炫酷的表白网页

一、前言 在 520 这个充满爱意的日子里&#xff0c;程序员该如何用代码表达浪漫&#xff1f;本文将分享一个结合动画特效与交互设计的 520 表白网页案例&#xff0c;通过 HTML/CSS/JavaScript 实现动态爱心、渐变背景、浮动文字等炫酷效果&#xff0c;手把手教你用技术传递心意…...

【QT】QTableWidget获取width为100,与真实值不符问题解决

背景 用stackedWidget内嵌2个QTableWidget页面&#xff0c;实现切换。在进行stackedWidget.width()的获取时候&#xff0c;可以正常获得ui界面设置的宽度值&#xff0c;但是在QTableWidget页面用同样的方式无法成功获取真实值&#xff0c;即使采用获取内容区域宽度&#xff08…...

Hive drop column 的解决方法

示例&#xff1a; 创建 text 格式的表 create table t1(c1 int, c2 int) stored as textfile;增加一个字段 alter table t1 add columns (c3 int);使用 replace columns 删除新加的字段 alter table t1 replace columns (c1 int, c2 int);对于 ORC 类型的表&#xff0c;使用…...

Python虚拟环境再PyCharm中自由切换使用方法

Python开发中的环境隔离是必不可少的步骤,通过使用虚拟环境可以有效地管理不同项目间的依赖,避免包冲突和环境污染。虚拟环境是Python官方提供的一种独立运行环境,每个项目可以拥有自己单独的环境,不同项目之间的环境互不影响。在日常开发中,结合PyCharm这样强大的IDE进行…...

Spark大数据分析案例(pycharm)

所需文件&#xff08;将文件放在路径下&#xff0c;自己记住后面要用&#xff09;&#xff1a; 通过百度网盘分享的文件&#xff1a;beauty_p....csv等4个文件 链接&#xff1a;https://pan.baidu.com/s/1pBAus1yRgefveOc7NXRD-g?pwd22dj 提取码&#xff1a;22dj 复制这段内…...

【QT】ModbusTCP读写寄存器类封装

背景 在编写ModbusTCP时候&#xff0c;连接、寄存器读写属于通用的功能&#xff0c;为了便于后续直接复用&#xff0c;选择封装到一个类。本博文在封装展示该类过程中&#xff0c;会提及到编写该类过程中&#xff0c;出现的连接未成功的问题&#xff0c;以及该问题的解决方式。…...

SQLMesh 内置宏详解:@PIVOT等常用宏的核心用法与示例

本文系统解析 SQLMesh 的四个核心内置宏&#xff0c;涵盖行列转换的 PIVOT、精准去重的 DEDUPLICATE、灵活生成日期范围的 DATE_SPINE&#xff0c;以及动态表路径解析的 RESOLVE_TEMPLATE。通过真实案例演示参数配置与 SQL 渲染逻辑&#xff0c;并对比宏调用与传统 SQL 的差异&…...

ajax post请求 解决自动再get请求一次

ajax post请求 解决自动再get请求一次 HTMLjavascriptFlask第一种方法&#xff1a;第二种方法&#xff1a; HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录</title></head> &l…...

当前主流的传输技术(如OTN、IP-RAN、FlexE等)

好的&#xff01;当前主流的传输技术&#xff08;如OTN、IP-RAN、FlexE等&#xff09;各有其独特的应用场景&#xff0c;下面我会逐一展开讲解&#xff0c;并结合实际案例说明它们如何在不同领域发挥作用。 一、OTN&#xff08;光传送网&#xff09; 1. 核心特点 大容量&…...

利用 SQL Server 作业实现异步任务处理,简化系统架构

在现代企业系统中&#xff0c;异步任务是不可或缺的组成部分&#xff0c;例如&#xff1a; 电商系统中的订单超时取消&#xff1b; 报表系统中的异步数据导出&#xff1b; CRM 系统中的客户积分计算。 传统的实现方式通常涉及引入消息队列&#xff08;如 RabbitMQ、Kafka&a…...

【Java高阶面经】3.熔断机制深度优化:从抖动治理到微服务高可用架构实战

一、熔断抖动的本质剖析与核心成因 1.1 熔断机制的核心价值与抖动危害 熔断机制作为微服务弹性架构的核心组件,通过模拟电路断路器逻辑,在服务出现异常时自动阻断请求链,防止故障扩散引发雪崩。但频繁的“熔断-恢复-熔断”抖动会导致: 用户体验恶化:请求成功率波动大,响…...

如何删除 HP 笔记本电脑中的所有数据:3 种解决方案说明

当您准备删除 HP 笔记本电脑中的所有数据时&#xff0c;无论是为了保护您的隐私还是为设备重新启动做好准备&#xff0c;使用正确的方法非常重要。在本文中&#xff0c;您可以获得 3 个有效的解决方案&#xff0c;帮助您轻松删除计算机中的所有内容。之后&#xff0c;您可以安全…...

以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会

2025 年 5 月 7 日至 9 日&#xff0c;台北 SecuTech 国际安全科技应用博览会现场热闹非凡&#xff0c;以太联 - Intellinet 携旗下前沿产品与解决方案精彩亮相&#xff0c;成为展会上一道亮丽的风景线&#xff0c;吸引了众多业内人士的目光&#xff0c;收获了广泛关注与高度认…...

JavaScript性能优化实战(13):性能测试与持续优化

在前面的系列文章中,我们探讨了各种JavaScript性能优化的方法和实战案例。然而,优化工作不应仅是一次性的努力,而应当成为开发流程中的常态。本篇将聚焦于如何建立系统化的性能测试体系,并实现持续的性能优化机制,确保应用长期保持出色的性能表现。 前端性能测试体系构建…...

nbufxz动态规划1

草药题 dp[i][j]&#xff0c;考虑i个草药&#xff0c;j个时间&#xff0c;能获得的最大价值。这i个草药中&#xff0c;你不一定全部都采集了。你可能有的采了&#xff0c;有的没采。然后你最终得到了一个最优的结果。 状态转移方程无非就是&#xff1a; dp[i][j] max(dp[i …...

PostgreSQL 初体验

目录 一、PostgreSQL 1. 简介 2. 特点 &#xff08;1&#xff09; 开源免费&#xff08;Open Source&#xff09; &#xff08;2&#xff09;标准兼容&#xff08;SQL Compliance&#xff09; &#xff08;3&#xff09; 丰富的数据类型&#xff08;Data Types&#xff09…...

北斗导航 | 基于matlab的多波束技术的卫星通信系统性能仿真

基于多波束技术的低轨(LEO)卫星通信系统 **1. 仿真场景建模**1.1 LEO卫星轨道参数设置1.2 地面终端分布**2. 多波束天线模型**2.1 波束方向图生成2.2 频率复用方案**3. 链路预算与干扰分析**3.1 自由空间路径损耗3.2 信噪比(SNR)计算**4. 动态资源调度算法**4.1 基于流量需…...

数据结构与算法学习笔记(Acwing 提高课)----动态规划·状态机模型

数据结构与算法学习笔记----动态规划状态机模型 author: 明月清了个风 first publish time: 2025.5.20 ps⭐️背包终于结束了&#xff0c;状态机模型题目不多。状态机其实是一种另类的状态表示方法&#xff0c;将某一个点扩展为一个状态进行保存并在多个状态之间转移&#xf…...

Vue 3.0 中 Teleport 详解

Teleport 是 Vue 3.0 引入的一个非常有用的特性&#xff0c;它允许你将组件的一部分模板"传送"到 DOM 中的其他位置&#xff0c;而不改变组件的逻辑层次结构。 1. 基本概念 Teleport 的主要用途是将某些 DOM 元素渲染到 Vue 应用之外的 DOM 节点中&#xff0c;这在…...

Linux在防火墙中添加开放端口

例如&#xff1a;安装docker时启动报错&#xff1a; Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 此时开放对应端口号就可以咯 在防…...

day24:零基础学嵌入式之系统编程

一、系统编程包含 文件的读写、和常用操作&#xff0c;操作系统已经进入多任务时代&#xff0c;在同一时刻同时运行多个程序。 二、标准io&#xff1b;stdio.h&#xff08;以计算机为中心&#xff09; 1.头文件路径&#xff1a;/usr/include/stdio.h so动态库&#xff1a;st…...

2.10 财务分析

10.1 财务报告构成及列报基本要求 10.1.1 财务报告 1.财务报告的构成 资产负债表、利润表、现金流量表、所有者权益变动表和附注小型企业可不编现金流量表。 2.财务报表及其作用 1.资产负债表的内容及其作用 内容 资产类、流动性大小顺序排序。流动资产、非流动资产负债和…...

docker容器知识

一、docker与docker compose区别&#xff1a; 1、docker是创建和管理单个容器的工具&#xff0c;适合简单的应用或服务&#xff1b; 2、docker compose是管理多容器应用的工具&#xff0c;适合复杂的、多服务的应用程序&#xff1b; 3、docker与docker compose对比&#xff…...

国标GB28181视频EasyGBS视频监控平台搭建城市交通道路可视化管理/道路视频巡检/应急监控指挥

一、方案背景​ 随着城市人口与车辆激增&#xff0c;交通管理面临严峻挑战&#xff1a;高峰期道路拥堵、事故处理滞后、违法取证低效&#xff0c;传统管理模式难以为继。智慧交通依托信息技术&#xff0c;成为破局关键&#xff0c;其中视频监控是实现精细化管理的核心。国标GB…...

【LeetCode 热题 100】有效的括号 / 最小栈 / 字符串解码 / 柱状图中最大的矩形

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 栈有效的括号最小栈字符串解码每日温度柱状图中最大的矩形 堆数组中的第K个最大元素 栈 有效的括号 有效的括号 cl…...

Oracle中如何解决BUFFER BUSY WAITS

和BUFFER CACHE相关的常见等待事件还有BUFFER BUSY WAITS。顾名思义&#xff0c;BUFFER BUSY WAITS等待事件指的是多个会话不能共享缓冲区中的数据块而引发的等待事件。 发生BUFFER BUSY WAITS事件时&#xff0c;P1值代表数据文件号&#xff0c;P2值代表数据块号&#xff0c;P3…...

LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II

LeetCode 93.复原IP地址 其实思想跟回文字符串那道题是类似的&#xff0c;但难点在于这道题的终止条件和判断是否IP地址进行划分后是否合理&#xff1f; 思路&#xff1a; 通过一个int类型的全局变量来记载 " . " 的数目 / 记录你当前所获得的小数组的数目&#x…...

Java转Go日记(四十一):Gorm删除

1.1.1. 删除/软删除 警告删除记录时&#xff0c;需要确保其主要字段具有值&#xff0c;GORM将使用主键删除记录&#xff0c;如果主要字段为空&#xff0c;GORM将删除模型的所有记录 // 删除存在的记录db.Delete(&email)DELETE from emails where id10;// 为Delete语句添加…...

Java基于SpringBoot的公交智能化系统,附源码+文档说明

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

电子电器架构 --- 汽车高性能计算

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

Journal of Real-Time Image Processing 投稿过程

投稿要求双栏12页以内(包括参考文献)&#xff0c;这个排版要求感觉不是很严格&#xff0c;我当时就是用普通的双栏的格式去拍的版&#xff0c;然后就提交了&#xff0c;也没单独去下载模版。 投稿过程 12.12 Submission received 12.12 Submission is under technical check 1…...

利用basee64特性 -- BYUCTF 2025 JWTF

题目信息: Unfortunately one of our JWTs was compromised by attackers, so we created a JWT Revocation List to ensure they can’t use it anymore. 代码量很少 # 导入必要的模块 # 从 flask 模块导入 Flask, request, redirect, make_response, jsonify 类和函数 from f…...

湖北理元理律师事务所:科学债务规划如何平衡还款与生活

在债务压力普遍加剧的背景下&#xff0c;如何通过专业规划实现“还款不停生活”&#xff0c;成为许多债务人关注的核心问题。湖北理元理律师事务所基于多年实务经验&#xff0c;总结出一套兼顾法律合规性与人性化需求的债务管理方案&#xff0c;其核心逻辑在于通过法律工具优化…...

1.1HarmonyOS NEXT技术架构深度解析:微内核架构与系统分层

HarmonyOS NEXT技术架构深度解析&#xff1a;微内核架构与系统分层 摘要 作为面向万物互联时代的全场景操作系统&#xff0c;HarmonyOS NEXT通过革命性的星核架构&#xff08;Star Kernel&#xff09;重构了系统底层架构。本文将深入解析HarmonyOS NEXT的微内核设计原理、系统…...

考研系列-408真题计算机组成原理篇(2015-2019)

写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2015年-2019年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2015年 1.IO端口 接口电路中可以被CPU直接访问的寄存器 IO控制方式-中断…...

HarmonyOS Next 关键资产的解释

关键资产的安全存储与管理&#xff1a;HarmonyOS Asset Store Kit 深度解析 一、关键资产的定义与重要性 关键资产&#xff08;Critical Asset&#xff09;是指应用运行过程中涉及的短敏感数据&#xff0c;包括但不限于用户密码、身份令牌&#xff08;Token&#xff09;、银行…...

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…...

第6章 C控制语句:循环

目录 6.1 再探while 循环6.2 while语句6.3 比较大小&#xff1a;使用关系运算符和表达式6.4 不确定的循环与计数循环6.5 for循环6.6 更多赋值运算符&#xff1a;、-、*、/和%6.7 逗号运算符6.8 退出条件循环&#xff1a;do while6.9 选择哪种循环6.10 嵌套循环6.11 数组6.12 使…...

海盗王客户端更换横版任务面板的实现

海盗王的任务面板&#xff0c;采用的是竖长设计&#xff0c;上半部分显示任务列表&#xff0c;下半部分显示任务详情。 这样的设计会带来一个问题&#xff1a;就是任务多的时候&#xff0c;不能完整显示&#xff0c;只能显示前面几个&#xff0c;后面的会隐藏到滚动条里面&…...

【git】在Windows上搭建git服务器

1、简述 常用的搭建git服务器的工具有&#xff1a;Gogs、Gitblit、Gitea、GitLab 它们的区别如下&#xff1a; 功能GogsGitblitGiteaGitLab界面语言中文、英文等多语言英文为主中文、英文等多语言英文为主权限管理基础分支权限详细分支权限基础 详细分支权限非常完善代码审查…...

leetcode hot100刷题日记——6.和为 K 的子数组

解答&#xff1a;前缀和思想&#xff0c;见灵茶山艾府大大题解。 &#xff08;1&#xff09;前缀和思想&#xff1a; 前缀和数组prefix_sum的定义是prefix_sum[i] nums[0] nums[1] … nums[i]。如果存在两个前缀和prefix_sum[j]和prefix_sum[i]满足prefix_sum[i] - prefi…...

人工智能的“歧视”:“她数据”在算法运行中隐形

纵观人类的发展史&#xff0c;每一次科技进步都将对性别平等产生深刻影响。尤其是当下&#xff0c;人们对于借助人工智能技术快速发展来弥合性别不平等寄予厚望。 但很多人没想过&#xff0c;人工智能技术本身是客观中立、不存在“算法歧视”“性别偏见的吗&#xff1f; 弗吉…...