加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java阵列效率

发布时间:2020-12-15 04:08:35 所属栏目:Java 来源:网络整理
导读:我不是100%肯定该机制在行动所以我决定在此发布以进一步澄清. 我正在做一个应该用Java处理大量数据的项目(它必须是Java).我希望它尽可能高效.有效率我的意思是内存和速度计算应首先进入,可读性应该排在第二位. 现在我有两种方法来存储我的数据:创建一个MyO
我不是100%肯定该机制在行动所以我决定在此发布以进一步澄清.

我正在做一个应该用Java处理大量数据的项目(它必须是Java).我希望它尽可能高效.有效率我的意思是内存和速度计算应首先进入,可读性应该排在第二位.

现在我有两种方法来存储我的数据:创建一个MyObject数组

1) MyObject[][] V = new MyObject[m][n]

或者创建两个int数组:

2) int[][] V = new int[m][n]

3) int[][] P = new int[m][n]

显然,MyObject包含至少两个字段和一些方法.现在我注意到,在循环遍历MyObject数组以分配值时,我必须调用new,否则我会得到一个空指针异常.这意味着第1行中的新内容是不够的.这是一个比参数更昂贵的操作,P [i] [j] = n,考虑到数组也是Java中的对象?

解决方法

Is this a more expensive operation than,for sake of argument,P[i][j]=n,considering that arrays are also objects in Java?

在第一种情况下,您将创建一个数组对象,用于存储类型为array的其他对象.数组对象和要存储在数组中的对象都需要实例化,这意味着您将需要m * n 1个对象实例化以及(m * n 1)* objectSize内存消耗.

在第二种情况下,您只需要实例化数组对象; int基元不是对象,所以这应该更快,也更高效,因为对象内存大小是int的几倍.这里你基本上有1个对象实例化和(m * n)* intSize objectSize内存消耗.

使用原语的另一个原因是,当用作局部变量时,它们被保存在堆栈中;在将计算值存储在数组中之前,您可能会在方法中使用中间局部变量,并且这些变量的内存的分配/释放时间比生存在堆上的对象的分配/释放时间高几倍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读