Java提高性能(部分转自http://www.matrix.org.cn)

1)这里比较一下ArrayList和LinkedList:
1.ArrayList是基于数组,LinkedList基于链表实现。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
这里只是理论上分析,事实上也不一定,比如ArrayList在末尾插入和删除数据就不设计到数据移动,不过还是
有这么个建议:随机访问比较多的话一定要用ArrayList而不是LinkedList,如果需要频繁的插入和删除应该
考虑用LinkedList来提高性能。

我个人认为,在大多数情况下都要优先考虑使用ArrayList。我曾经看过一个java1.5上的测试报告,数据显示当且仅当在“需要在list头部大量增删数据”时,LinkedList才显示出优势,其他情况下均败给ArrayList。有些时候,即使是需要在头部做大量操作,也可以通过反转list的形式把它变成尾部操作,这样就方便ArrayList了。所以一般LinkedList出场的几率很小。

2)复制数组的时候使用System.arraycopy静态方法,而不要通过循环遍历来一个个赋值。具体查看jdk文档。

3)multiple dimension array
Java里面的multiple dimension array实际上是用array of arrays来模拟的,这样导致他们可能并非储存在连续的内存空间,会引起比较糟糕的内存访问的问题。

IBM的ninja group开发了一个package来解决这个问题,Array Package

4)避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。

或许尽量在条件语句之前就计算好条件表达式是个好习惯,尽量让条件表达式是一个“量”而不是“表达式”。

5)为'Vectors' 和 'Hashtables'定义初始大小 JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小

6)使类和成员的可访问能力最小化
复合优先于继承
接口优先于抽象类

(当然,第6条乎跟性能联系不大,但却是一个很好的设计原则问题)

7)

如果字符串特别长,采用charAt逐一获取特定位置的字符是非常耗时的。因为每次获取制定索引位置的字符都要引起新的检索过程,更好的办法是将字符串通过调用toCharArray方法转换成字符数组,然后通过数组索引值获得指定位置的字符

8)使用移位操作来代替'a / b'操作 "/"是一个很“昂贵”的操作,使用移位操作将会更快更有效。

(这一条在其它语言中也是成立的,不怕麻烦的话可以考虑,不过一般不必为此周折...)

9)对于boolean值,避免不必要的等式判断 将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处: 1)代码执行的更快 (生成的字节码少了5个字节); 2)代码也会更加干净

(这条貌似很浅显,但却是很多初学者会犯的毛病)

10)尽量不要将大对象放到HttpSession或其他须序列化的对象中,并注意及时清空Session

11)不要随便将大段代码放入Synchronized块中,这个很好理解,没必要的Synchronized块应该舍去。

12)在涉及字符串的大量更改操作中,使用StringBuffer/StringBuilder,若需要线程安全性,用StringBuffer;否则用StringBuider更有效率。这是因为StringBuffer为了保持线程安全性而损失了性能。同样的关系出现在Hashtable/HashMap和Vector/ArrayList上(前者线程安全,后者线程不安全,但更有效率)。

13)减少try块的使用。对于这个,一个可以接受的建议是:在编写功能组件时不进行异常的try/catch,用throws,但要给出每个方法可能抛出的异常的列表。等到在业务逻辑中(或者说main函数中)调用这些功能组件时在统一try/catch这些功能组件抛出的异常,集中处理。

好了,暂时就想到这些,肯定还有,以后再补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 未来警告:np.matrix在1.0版本中已被弃用,并将在1.2版本中引发TypeError错误。请使用np.asarray将其转换为numpy数组。有关更多信息,请参见:https://numpy.org/doc/stable/reference/generated/numpy.matrix.html。警告:' ### 回答2: 这是一个关于NumPy版本更新的警告。在NumPy版本1.0中,使用np.matrix进行矩阵操作已经被标注为“deprecated”。这意味着在1.2版本中,将无法再使用这种方式进行操作,因为会引发类型错误。因此,在未来的版本中,必须转换为numpy array(通过np.asarray)进行操作。 此警告可以理解为是为了提醒用户,NumPy版本在不断地更新和优化,而一些旧的方法可能会被新方法替代或者移除。在新版本中使用已经被淘汰的方法,可能会导致无法预料的错误和不良影响。 因此,当开发者开发代码时,需要密切关注NumPy版本更新的信息,并适时调整代码中使用的方法。同时,注意该警告所提到的替换方式,即通过np.asarray转换为numpy array。这种方式可以保持代码功能不变的同时,更新数据类型,以避免出现意想不到的错误。 虽然这种警告会让开发者在写代码时需要多做一些工作,但它也是为了保障代码的稳定和可靠性。因此,我们需要对这种警告保持敏感,并在必要的时候及时修正代码中出现的问题。 ### 回答3: 这个警告是来自于 Numpy 软件包,告诉用户在未来的版本中 np.matrix 的使用方式将被弃用,而且在 1.2 版本中将会抛出 TypeError 异常。因此用户需要将其转换为 Numpy 数组,并使用 np.asarray 函数进行转换。 Numpy 是 Python 中使用最广泛的科学计算库之一,包含了大量的数学、统计与科学计算函数。在 Numpy 中,矩阵是一个非常重要的概念,它是一种特殊的二维数组,常用于线性代数运算。 然而,np.matrix 的使用方式在 Numpy 1.0 版本中已经被标记为过时,虽然在当前版本中仍然能够使用,但是官方建议用户立即更换为新的使用方式。因为在未来版本中,np.matrix 的使用方式将被彻底取消,取而代之的是更加灵活和高效的数组方式。 因此,用户在编写代码时应该注意避免使用被弃用的函数,例如 np.matrix,以避免在未来版本中产生错误或不可预测的行为。如果确实需要使用矩阵来进行运算,建议使用 Numpy 数组或稠密矩阵来代替 np.matrix,而在转换数据时可以使用 np.asarray 函数来进行数据类型转换。如果用户仍然需要使用 np.matrix,则需要在未来版本中做相应的修改来适应新的使用规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值