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

Java 中的 HashMap 原理详解:底层结构与实现机制

HashMap 是 Java 中最常用的数据结构之一,它以其高效的存取速度在众多应用场景中被广泛使用。理解 HashMap 的底层实现原理,对提升开发效率、优化性能以及编写高效的代码都至关重要。本文将深入探讨 HashMap 的数据结构、存储机制、解决冲突的策略、扩容机制等内容。

目录

  1. 什么是 HashMap?
  2. HashMap 的底层数据结构
  3. HashMap 的工作原理
    • Hash 函数
    • 存储数据的过程
    • 取出数据的过程
  4. 解决哈希冲突的策略
  5. 扩容机制与性能优化
  6. HashMap 在多线程中的问题
  7. 小结

1. 什么是 HashMap?

HashMap 是 Java 集合框架中基于哈希表的数据结构,提供了键-值对的存储。它的主要优点在于快速的查找、插入和删除,其时间复杂度通常为 O(1)HashMap 允许 null 键和 null 值,但它不是线程安全的,多个线程同时访问时需要额外的同步措施。

2. HashMap 的底层数据结构

HashMap 的底层是一个数组 + 链表 + 红黑树的复合结构。在 JDK 1.8 之前,HashMap 使用的是数组和链表的结合体。而在 JDK 1.8 之后,当链表长度超过一定阈值(默认是 8)时,会将链表转换为红黑树,以提升性能。

具体结构:

  • 数组(Bucket)HashMap 的底层是一个数组,每一个数组元素被称为一个 桶(Bucket),每个桶用于存储多个键值对。
  • 链表:当多个键的哈希值相同,被映射到同一个桶时,会形成一个链表,这种现象被称为哈希冲突。
  • 红黑树:在链表长度超过阈值时,HashMap 会将链表转换为红黑树,以提高查找的效率,将时间复杂度从 O(n) 降低到 O(log n)。

3. HashMap 的工作原理

3.1 Hash 函数

HashMap 使用哈希函数将键映射到数组中的某个位置,从而将值存储在特定的位置。HashMap 使用的哈希函数通过对键的 hashCode() 值进行处理,以确定键在数组中的位置。

哈希函数在实现过程中,主要使用以下步骤:

  1. 调用键对象的 hashCode() 方法来计算键的哈希值。
  2. 使用位运算(例如:h ^ (h >>> 16))来减少哈希碰撞。
  3. 通过取模操作 hash % n(n 为数组长度)来计算键在数组中的位置。

这种方式可以保证哈希值的均匀分布,尽量减少碰撞的可能性。

3.2 存储数据的过程

当调用 put(key, value) 方法时,HashMap 会执行以下操作:

  1. 计算 key 的哈希值,确定存储的位置(桶索引)。
  2. 如果该位置为空,则将 key-value 直接存储在该位置。
  3. 如果该位置不为空,说明发生了哈希冲突,则通过链表或红黑树来解决冲突。
  4. 如果链表的长度超过阈值(默认是 8),则会将链表转换为红黑树。
3.3 取出数据的过程

当调用 get(key) 方法时,HashMap 会执行以下操作:

  1. 通过 key 计算哈希值,找到对应的桶位置。
  2. 在该位置,如果是链表则遍历查找;如果是红黑树,则通过树的查找方法找到相应的 key
  3. 找到对应的 key,返回其对应的 value

4. 解决哈希冲突的策略

哈希冲突是指多个键通过哈希函数计算得到相同的桶索引。HashMap 使用以下策略来解决哈希冲突:

  • 链地址法:当哈希值冲突时,键值对会以链表的形式连接在同一个桶中。
  • 红黑树优化:在 JDK 1.8 及之后,当链表长度超过 8 时,链表会被转换为红黑树,以加快查找速度。

这种组合的结构使得 HashMap 在处理大量数据和高频插入、查询时,能更高效地执行。

5. 扩容机制与性能优化

5.1 扩容条件

HashMap 具有一个容量和一个负载因子,当存储的元素数量超过 容量 * 负载因子 时,就会触发扩容。默认的初始容量是 16,负载因子是 0.75。因此,当 HashMap 中元素数量超过 12 时(16 * 0.75),会进行扩容,容量翻倍。

5.2 扩容过程

扩容时,会重新创建一个容量更大的数组,并将原有数据重新映射到新的数组中。这种重新哈希的过程是非常耗时的,因此在使用 HashMap 时需要尽量减少扩容的次数。

性能优化建议

  • 在知道元素数量的情况下,最好在创建 HashMap 时就指定合适的初始容量,以减少扩容带来的性能开销。
  • 适当调整负载因子,降低负载因子会减少冲突,但会增加空间的浪费。

6. HashMap 在多线程中的问题

HashMap 并不是线程安全的,多个线程并发访问时可能会出现数据丢失死循环等问题。要解决多线程下的 HashMap 使用问题,可以采用以下几种方式:

  • 使用 Collections.synchronizedMap(new HashMap<>()) 来包装成线程安全的 Map
  • 使用 ConcurrentHashMap,它是线程安全的替代方案,通过分段锁的机制,实现了高效的并发访问。

ConcurrentHashMap 通过对内部桶进行分区,每个分区独立加锁,从而实现了更高效的并发控制。

7. 小结

HashMap 是 Java 中常用的基于哈希表的数据结构,具有高效的插入和查找性能。在 JDK 1.8 之后,HashMap 的底层实现通过数组 + 链表 + 红黑树的组合结构,进一步优化了哈希冲突的处理方式,以提升性能。

  • HashMap 使用 哈希函数 将键映射到数组中的位置,并通过链表和红黑树来处理哈希冲突。
  • 扩容机制和负载因子是决定 HashMap 性能的关键,需要合理设置以提高性能。
  • HashMap 不是线程安全的,在多线程环境下建议使用 ConcurrentHashMap 或其他同步策略。

理解 HashMap 的底层实现,可以帮助开发者更好地使用它进行高效的数据存储与管理,同时避免常见的错误和性能陷阱。

相关文章:

Java 中的 HashMap 原理详解:底层结构与实现机制

HashMap 是 Java 中最常用的数据结构之一&#xff0c;它以其高效的存取速度在众多应用场景中被广泛使用。理解 HashMap 的底层实现原理&#xff0c;对提升开发效率、优化性能以及编写高效的代码都至关重要。本文将深入探讨 HashMap 的数据结构、存储机制、解决冲突的策略、扩容…...

数据库MYSQL——表的设计

文章目录 前言三大范式&#xff1a;几种实体间的关系&#xff1a;一对一关系&#xff1a;一对多关系&#xff1a;多对多关系&#xff1a; 前言 之前的博客中我们讲解的是关于数据库的增删改查与约束的基本操作&#xff0c; 是在已经创建数据库&#xff0c;表之上的操作。 在实…...

CUDA补充笔记

文章目录 一、不同核函数前缀二、指定kernel要执行的线程数量三、线程需要两个内置坐标变量来唯一标识线程四、不是blocksize越大越好&#xff0c;上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是&#xff1a; 1 * N N个线程…...

OSI七层模型和TCP/IP五层模型详细介绍

这里写目录标题 一.OSI含义二.OSI七层模型1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层 TCP/IP五层协议1.应用层2.运输层运行在TCP上的协议运行在UDP上的协议 3.网络层IP协议配套使用的协议 4.数据链路层 四.网络协议分层的好处 一.OSI含义 OSI即是开放式通…...

mac安装Pytest、Allure、brew

安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令&#xff1a;brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…...

Linux/Windows/OSX 上面应用程序重新启动运行。

1、Linux/OSX 上面重新运行程序&#xff0c;直接使用 execvp 函数就可以了&#xff0c;把main 函数传递来的 argv 二维数组&#xff08;命令行参数&#xff09;传进去就可以&#xff0c;注意不要在 fork 出来的子进程搞。 2、Windows 平台可以通过 CreateProcess 函数来创建新的…...

自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…...

AI的自我陷阱:大型神经网络训练中的模型崩溃现象

10月7日&#xff0c;发布在arxiv上的一篇名为Strong Model Collapse的论文&#xff0c;由Meta 、纽约大学和加州大学洛杉矶分校的研究人员共同发表的研究表明在训练大型神经网络&#xff08;如 ChatGPT 和 Llama&#xff09;时&#xff0c;由于训练语料库中包含合成数据而导致的…...

Python(下载安装)

简介 开发工具&#xff1a;pycharm, VS Code 1. 下载&#xff08;解释器程序&#xff09; Download Python | Python.org 2. 安装&#xff08;解释器程序&#xff09; 双击下载后的exe文件 查看版本&#xff1a;python&#xff08;并可以执行python代码&#xff09; 3. 下载…...

记录一种在内核空间向用户空间通知中断的方法

记录一种在内核空间向用户空间通知中断的方法 0.前言1.代码实现1)内核设备驱动实现2)消息通知实现3)测试程序 2.解析 参考文章&#xff1a;Linux驱动实践&#xff1a;中断处理函数如何【发送信号】给应用层&#xff1f; 0.前言 最近在项目中遇到一个需求&#xff0c;需要将一个…...

Apache Maven 标准文件目录布局

Apache Maven 采用了一套标准的目录布局来组织项目文件。这种布局提供了一种结构化和一致的方式来管理项目资源&#xff0c;使得开发者更容易导航和维护项目。理解和使用标准目录布局对于有效的Maven项目管理至关重要。本文将探讨Maven标准目录布局的关键组成部分&#xff0c;并…...

【vim】使用 gn 组合命令实现搜索选中功能

gn是Vim 7.4新增的一个操作&#xff08;motion&#xff09;&#xff0c;作用是跳到并选中下一个搜索匹配项。 具体说&#xff0c;Vim里执行搜索后&#xff0c;执行n操作只会跳转到下一个匹配项&#xff0c;而不选中它。但是我们往往需要对匹配项执行一些修改操作&#xff0c;例…...

解决登录Google账号遇到手机上Google账号无法验证的问题

文章目录 场景小插曲解决方案总结 场景 Google账号在新的设备上登录的时候&#xff0c;会要求在手机的Google上进行确认验证&#xff0c;而如果没有安装Google play就可能出现像我一样没有任何弹框&#xff0c;无法实现验证 小插曲 去年&#xff0c;我在笔记本上登录了Googl…...

基于YOLOv10深度学习的公共安全持刀行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着社会的不断进步和城市化进程的加快&#xff0c;人口密度的增加和社会结构的复杂化使得公共安全问题日益凸显。近年来&#xff0c;各类公共安全事件频发&#xff0c;其中持刀行为作为一种典型的暴力行为&#xff0c;已成为威胁公共安全的严重因素之一。这种行为在公共场所发…...

HP6心率血压传感器

目录 一、介绍 1、工作原理概述 2、具体实现步骤 二、HP6的通信及配置 1、通信接口 2、器件地址/命令 3、校验 三、程序设计 ①IIC通信相关基础函数 ②HP6相关基础函数 一、介绍 HP6心率血压传感器的原理主要基于光电容积脉搏波描记法&#xff08;PPG&#xff09;&…...

深入理解 JVM 中的 G1 垃圾收集器原理、算法、过程和参数配置

引言 Java 虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称 GC&#xff09;是自动内存管理的核心部分。G1&#xff08;Garbage-First&#xff09;垃圾收集器是 Oracle 在 JDK 7u4 版本中引入的一种新型垃圾收集器&#xff0c;…...

细说敏捷:敏捷四会之standup meeting

上一篇文章中&#xff0c;我们讨论了 敏捷四会 中 冲刺计划会 的实施要点&#xff0c;本篇我们继续分享敏捷四会中实施最频繁&#xff0c;团队最容易实施但往往也最容易走形的第二个会议&#xff1a;每日站会 关于每日站会的误区 站会是一个比较有标志性的仪式活动&#xff0…...

MySQL系列之身份鉴别(安全)

导览 前言Q&#xff1a;如何保障MySQL数据库身份鉴别的有效性一、有效性检查1. 用户唯一2. 启用密码验证3. 是否存在空口令用户4. 是否启用口令复杂度校验5. 是否设置口令的有效期6. 是否限制登录失败尝试次数7. 是否设置&#xff08;超过尝试次数&#xff09;锁定的最小时长8.…...

vue3封装Element Plus table表格组件

支持绝大部分Element Plus原有设置属性&#xff0c;支持分页&#xff0c;支持动态适配高度 效果展示 组件代码&#xff1a; <template><div class"table-wrap" ref"tableWrap"><el-tableclass"w100 h100":data"tableInfo.…...

SFP+光模块介绍

SFP光模块介绍 1 SFP光模块简介(Small Form -Factor Pluggable)2 光模块管脚定义 1 SFP光模块简介(Small Form -Factor Pluggable) 光模块&#xff08;Optical Module&#xff09;由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括激光发射器(Laser Transmitte…...

神经网络的初始化

目录 为什么需要初始化&#xff1f; 初始化的常用方法&#xff1a; 是否必须初始化&#xff1f; 初始化神经网络中的权重和偏置是深度学习模型训练中非常重要的一步&#xff0c;虽然在某些情况下不进行初始化也能训练出模型&#xff0c;但正确的初始化方法能够显著提高训练效…...

数据集搜集器0.01

我们使用Python的Tkinter库来创建GUI界面&#xff0c;并使用requests库来从360百科获取数据。下面是一个完整的示例代码&#xff0c;它包括了一个简单的GUI界面&#xff0c;用户可以输入问题&#xff0c;点击按钮后会从360百科获取相关信息&#xff0c;并显示在同一个Text组件中…...

【Lucene】搜索引擎和文档相关性评分 BM25 算法的工作原理

BM25 算法的工作原理&#xff1a; 什么是 BM25 算法&#xff1f; BM25 是一种流行的文本检索算法&#xff0c;广泛用于搜索引擎和文档相关性评分。它基于概率检索模型&#xff0c;旨在评估查询和文档之间的相关性。 核心公式 BM25 的公式如下&#xff1a; score ( D , Q ) …...

嵌入式Linux——文件类型

目录 普通文件 目录文件 目录文件的权限与管理 字符设备文件和块设备文件 符号链接文件 查看符号链接 删除符号链接 修改符号链接 管道文件 匿名管道&#xff08;Anonymous Pipe&#xff09; 匿名管道的特点&#xff1a; 使用示例&#xff1a; 命名管道&#xff08…...

ES6 模块化语法

目录 ES6 模块化语法 分别暴露 统一暴露 ​编辑 默认暴露 ES6 模块化引入方式 ES6 模块化语法 模块功能主要由两个命令构成&#xff1a;export 和 import。 ⚫ export 命令用于规定模块的对外接口&#xff08;哪些数据需要暴露&#xff0c;就在数据前面加上关键字即可…...

Gradio学习笔记记录

安装指令&#xff1a;pip install gradio方法介绍 Interface》用于构建一些简单的页面&#xff0c;可以直接用这个指令搞定 形式》接收三个参数分别为处理函数、输入、输出三部分&#xff0c;呈现一般左/上为输入&#xff0c;右或下为输出 fn&#xff1a;将用户界面 &#xff0…...

Node.js的下载与安装(支持各种新旧版本)

目录 1、node官网 2、node软件下载 3、软件安装&#xff08;完整版&#xff09; 1、node官网 Node.js — Download Node.jshttps://nodejs.org/en/download/package-manager 2、node软件下载 按照下图进行选择node版本&#xff08;真心推荐16/18&#xff0c;而是尽量是LTS…...

数据库和缓存的数据一致性 -20241124

问题描述 一致性 缓存中有数据&#xff0c;缓存的数据值数据库中的值缓存中本没有数据&#xff0c;数据库中的值最新值&#xff08;有请求查询数据库时&#xff0c;会将数据写入缓存&#xff0c;则变为上面的“一致”状态&#xff09; “数据不一致”&#xff1a; 缓存的数据值…...

【计算机网络】多路转接之select

系统提供select()来实现多路转接 IO 等 拷贝 -> select()只负责等待&#xff0c;可以一次等待多个fd select()本身没有数据拷贝的能力&#xff0c;拷贝要read()/write()来完成 一、select的使用 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exc…...

Linux命令思维导图

看到一个很不错的Linux命令思维导图&#xff0c;用机器翻译了一下&#xff0c;建议收藏备用。 附上英文版&#xff1a;...

自然语言处理(词嵌入和词向量的使用)

一、实验目的 1.了解词嵌入和词向量的基本概念及其在自然语言处理中的应用。 2.掌握使用One-Hot编码和Word2Vec模型构建词向量的方法。 3.掌握Doc2Vec模型构建文档向量的方法以及如何计算文档向量之间的相似度。 二、实验内容 &#xff08;1&#xff09;使用One-Hot编码构…...

量子感知机

神经网络类似于人类大脑&#xff0c;是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题&#xff0c;是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…...

[HarmonyOS] 解决HMRouter路由地址无法抽取的问题

解决HMRouter路由地址无法抽取的问题 背景 最近开始学习HarmonyOS开发&#xff0c;搭建项目的时候采用了 HMRouter 路由框架&#xff0c;在项目里使用到路由跳转&#xff0c;官方链接在这&#xff1a; https://gitee.com/hadss/hmrouter/blob/master/HMRouterLibrary/README…...

七天掌握SQL--->第四天:事务处理与并发控制

# 7天掌握SQL - 第四天&#xff1a;事务处理与并发控制 ## 目标 - 学习事务处理的基本概念&#xff0c;如ACID特性。 - 掌握并发控制的方法&#xff0c;如锁机制、事务隔离级别等。 - 通过实际案例练习事务处理和并发控制。 ## 1. 事务处理的基本概念 事务处理是数据库管理系…...

Docker学习笔记整理

这周不知道写点啥内容做个分享&#xff0c;但还是秉持学会分享的精神&#xff0c;粗略放一些Docker相关的问题和解答吧&#xff0c;后面有机会再补补再深挖深挖o(>﹏<)o 1. 容器VS虚拟机 虚拟机是一种带环境安装的解决方案&#xff08;资源完全隔离&#xff09;,有以下缺…...

PIMPL模式和D指针

一、PIMPL模式概念&#xff1a; Pimpl&#xff08;pointer to implementation, 指向实现的指针&#xff09;是一种用来对“类的接口与实现”进行解耦合的方法。就是将真正的实现细节的Implementor从类定义的头文件中分离出去&#xff0c;公有类通过一个私有指针指向隐藏的实现类…...

Linux入门系列--文件与目录

一、介绍 在Linux中&#xff0c;有着一句话&#xff0c;叫做&#xff1a;一切皆文件。也就是任何东西都是以文件的形式存储的。 目录结构 bin&#xff1a;全程binary&#xff0c;含义是二进制。该目录中存储的都是一些二进制文件。我们学过C/C&#xff0c;其实也都知道机器能…...

论文阅读——Intrusion detection systems using longshort‑term memory (LSTM)

一.基本信息 论文名称&#xff1a;Intrusion detection systems using longshort‑term memory (LSTM) 中文翻译&#xff1a;基于长短期记忆(LSTM)的入侵检测系统 DOI&#xff1a;10.1186/s40537-021-00448-4 作者&#xff1a;FatimaEzzahra Laghrissi1* , Samira Douzi2*, Kha…...

平面点排序(结构体专题)

(1) 题目描述 平面上有n个点&#xff0c;坐标均为整数。请按与坐标原点&#xff08;0,0&#xff09;距离的远近将所有点排序输出。可以自己写排序函数&#xff0c;也可以用qsort库函数排序。 输入描述 输入有两行&#xff0c;第一行是整数n&#xff08;1<n<10)&#xff…...

QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现

网络调试助手&#xff1a; 提前准备&#xff1a;在编写代码前&#xff0c;要在.pro工程文件中&#xff0c;添加network模块。 服务端&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtWidgets> #inclu…...

搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)

在搜索场景中&#xff0c;BM25能计算每个文档与查询的匹配度&#xff0c;从中找出最相关的文档&#xff0c;并按相关性高低排序展示。 要理解BM25&#xff0c;需要掌握以下几个关键概念&#xff1a; 1. 词频&#xff08;Term Frequency, TF&#xff09;&#xff1a;某关键词在文…...

文件上传需要考虑的安全性问题及解决方案

恶意文件上传&#xff1a;攻击者可能上传包含恶意代码的文件&#xff0c;如病毒、木马等&#xff0c;这些文件被服务器执行后&#xff0c;可能完全控制服务器或破坏服务器安全。为避免这种情况&#xff0c;应实施严格的文件验证策略&#xff0c;只允许特定的安全文件类型上传&a…...

论文笔记:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

1. 挑战/问题&#xff08;Challenges/Issues&#xff09;&#xff1a; 这篇论文探讨了大型预训练语言模型在处理知识密集型自然语言处理&#xff08;NLP&#xff09;任务时面临的挑战。尽管这些模型在参数中存储了大量事实知识&#xff0c;并在微调后能够在下游NLP任务中取得很…...

Web 网络安全

一. 浏览器系统安全方面&#xff0c;使用多进程方案&#xff0c;而js主线程运行在渲染进程中&#xff0c;渲染进程时运行在沙箱中的&#xff0c;没有对本地OS文件的直接读写权限&#xff0c;所以需要通过IPC与浏览器主线程通信&#xff0c;才可以获取cookie等信息&#xff0c;这…...

Android Gradle 插件和 Android Studio 兼容性

Android Gradle 插件和 Android Studio 兼容性 Android Studio 版本所需的 AGP 版本Ladybug 2024.2.13.2-8.7Ladybug 2024.2.13.2-8.7Koala 2024.1.12024.2.1Jellyfish 2023.3.12024.2.1Iguana 2023.2.13.2-8.3Hedgehog 2023.1.13.2-8.2Giraffe 2022.3.13.2-8.1Flamingo 2022.…...

C++设计模式-策略模式-StrategyMethod

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都编码到对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不使用的算法也是一个性能负担。 如何在运…...

【H2O2|全栈】JS案例章节(四)——使用原型的JS工厂模式

目录 前言 开篇语 准备工作 需求 工厂模式 概念 优点 添加元素的新方法 分析案例 HTML代码 JS实现 结束语 前言 开篇语 本系列为短章节&#xff0c;单独讲述部分特殊重点案例&#xff0c;本期讲述使用原型来实现JS的工厂模式。 与HTML和CSS相比&#xff0c;JS加…...

.NET9 - 新功能体验(三)

书接上回&#xff0c;我们继续来聊聊.NET9和C#13带来的新变化。 01、Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和 AggregateBy后&#xff0c;可以在不经过GroupBy 分配中间分组的情况下快速完成复杂的聚合操作&#xff0c;同时方法命名也非常直观&#xff0…...

论文概览 |《Journal of Urban Technology》2024 Vol.31 Issue.2

本次给大家整理的是《Journal of Urban Technology》杂志2024年第31卷第2期的论文的题目和摘要&#xff0c;一共包括6篇SCI论文&#xff01; 论文1 Aerial Video Surveillance in a Megacity: A Case Study in Santiago, Chile 大城市中的空中视频监控&#xff1a;智利圣地亚哥…...