java中二维数组在内存中是如何表示的?

2024-04-15

我正在尝试使用键、值对实现数据结构,并正在研究数组实现。

实现此目的的一种方法是为键和值声明单独的一维数组。

  private int[] keys = new int[N];
private int[] values = new int[N];

但是,可以通过如下声明一个二维数组来实现同样的目的,并且不影响数据局部性吗?

private int[][] keysAndValues = new int[2][N];

Java 按行优先顺序实现多维数组似乎很重要?以这种方式声明数组是否有任何性能优势,或者这是否会降低代码的可读性?


Java中的2D数组实际上是一个对象引用数组,每个对象引用都指向一个1D数组。 2D 数组和每个 1D 数组都是单独的堆对象,并且(理论上)可以位于堆中的任何位置。

(有关原因的讨论,请参阅:为什么Java没有真正的多维数组? https://stackoverflow.com/questions/26318341/why-doesnt-java-have-true-multidimensional-arrays?rq=1)


但是,可以通过如下声明一个二维数组来实现同样的目的,并且不影响数据局部性吗?

是的,它可以。

两个版本之间的数据局部性差异很小,特别是如果我们可以假设N相比而言较大2。 (如果我们不能,那么数据局部性很可能是无关紧要的;即性能差异将太小而不会显着。)

Java 按行优先顺序实现多维数组似乎很重要?

这是一个问题吗?如果是,那么我想是的。这当然是相关的……尽管如果 Java 实现了它们的列优先,那么您只需翻转行和列并得到等效的解决方案

以这种方式声明数组是否有任何性能优势,或者这是否会降低代码的可读性?

性能问题可能并不重要。但如果它真的非常重要,那么最好的建议是在真实的输入数据集上为自己分析和优化代码。

至于可读性,那就由你来判断了。我无法预测你的代码会是什么样子。


如果您确实想控制内存局部性,那么最好的方法是使用单个一维数组,并以提供整体最佳局部性的方式映射索引。 (这取决于您的应用程序以及它如何引用数组中的数据。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中二维数组在内存中是如何表示的? 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 将 A 框架与 Three.js 相结合

    我想知道 是否可以将 Three js 元素添加到 A 框架场景中 假设 A frame 是基于 Three js 构建的 并且 three Version 0 74 0 登录到你的控制台这不应该是一件奇怪的事情 对吧 我在我的 A 框架场
  • WPF 中的颜色过渡

    我想要进行颜色过渡BackgroundWPF 窗口的颜色 我怎样才能做到这一点 例如 Brush i color Brushes Red this is the initial color Brush f color Brushes Blu
  • cmake 在 OS X 上找不到 gl.h

    我在 OS X 10 10 上并尝试使用 GLUT 和 OpenGL 构建一个 C 项目 我将其简化为展示我的问题的最小示例 我有以下内容CMakeLists txt cmake minimum required VERSION 2 8 F
  • delphi读取xml元素

    我是 XML 新手 我们需要使用新的进行地理编码必应空间数据 API http msdn microsoft com en us library gg585131 aspx 我已经设法以 xml 格式从他们那里得到结果 我将如何阅读响应中的
  • rake db:test:prepare 中的 Rails 待迁移

    我已经跑了rake db migrate我所有的迁移都运行了 然而 当我尝试跑步时rake db test prepare我收到错误 You have 1 pending migrations 20130724211328 CreateGa
  • Extjs 4(下面有3.4的代码)下载从post请求返回的文件

    我看到了与此略有相关的问题 但没有一个能回答我的问题 我设置了 Ext Ajax request 如下 var paramsStringVar param1 1 param2 two param3 something param4 etc
  • 为什么接口 IOrderedEnumerable 在 T 中不是协变的?

    我正在查看 IOrderedEnumerable 的声明 令我惊讶的是它的 TElement 类型参数不是协变的 public interface IOrderedEnumerable
  • Java 输入问题 - 如何比较字符串[重复]

    这个问题在这里已经有答案了 这看起来很简单 但我已经被困在这里几个小时了 我有一个疑问 当你必须在Java中比较两个字符串时 如果我只是做这样的事情 String var1 hello String var2 hello 然后在另一个函数中
  • SwiftUI:ScrollView 拖动底部工作表

    我正在尝试创建一个 SwiftUI Scrollview 来拖动其容器 如下所示 https drive google com file d 1O92DgsVI1OjM1HEUXUwVywB8gcdShOP view usp sharing
  • PromQL if then 语句等效

    我有一个执行计数的简单 PromQL 查询 sum up container name my container environment name env 这是 Grafana 仪表板的一部分 允许从下拉菜单中选择 env 我想根据环境执行
  • SQL Server 分区查询

    当我运行查询时 select 100 50 它给我 2 很好 但是当我运行查询时 select 50 100 我原以为它会给我 0 5 但它却给了我 0 为什么 我怎样才能得到0 5 select 25 30 100 我预计它会给我 83
  • 获取Webbrowser Control中URL的原始源代码

    我有一个嵌入在 C Windows 应用程序中的浏览器控件 我想获取 url 包含的原始 HTML 不是渲染的 HTML 它可能已被 javascript 修改 与在 IE 中查看源代码中的内容相同 有什么建议么 WebBrowser Do
  • Python:使用 %x(区域设置)格式化的日期与预期不符

    我有一个日期时间对象 我想根据操作系统区域设置 例如在 Windows 7 区域和语言设置中指定 为其创建日期字符串 遵循Python的日期时间格式化文档 http docs python org library datetime html
  • Chrome Webview 中的 Service Worker 支持

    Android 版 chrome webview 是否支持 Service Worker 如果是 则支持哪个版本 尝试谷歌搜索 但没有找到正确的信息 As per 本公告 https chromereleases googleblog co
  • Opencv 函数只能以 C 代码方式调用,不能以 C++ 方式调用

    我对 Opencv 真的很陌生 按照说明下载并安装 Opencv 2 4 后 我开始编写我的第一个 Opencv 程序 这基本上是网络上教程的副本 include
  • 无法序列化泛型类型

    我正在尝试使用 protobuf net 序列化通用类型 但 protobuf net 说它无法序列化它 As in RuntimeTypeModel Default CanSerialize typeof MyGenericClass l
  • 在asp.net中通过javascript警报显示异常消息

    我试图通过 javascript 警报框显示异常消息 这是示例代码 public static void HandleException Page page Exception ex string message ex Message To
  • Spring中独立应用程序中的预定方法

    我有一个方法需要每天 07 00 执行 为此 我使用该方法创建了一个 bean 并用 Scheduled cron 0 0 7 在这个bean中我创建了一个mainfunction 它将初始化 spring 上下文 获取 bean 并调用方
  • 在 python 2.6 上加载 win32file.pyd 时出现问题

    即使是使用 win32file 的简单脚本 我也无法使 py2exe 正确打包 我不断收到以下错误消息 Traceback most recent call last File dependency checker py line 1 in
  • java中二维数组在内存中是如何表示的?

    我正在尝试使用键 值对实现数据结构 并正在研究数组实现 实现此目的的一种方法是为键和值声明单独的一维数组 private int keys new int N private int values new int N 但是 可以通过如下声明