1.return 一个空的集合,而不是 null
    如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素。这样你就不用去写一大堆 ”if else” 判断null元素 可以返回Collections.EMTY_LIST 或EMTY_SET EMTY_MAP

    2.字符拼接的时候少用String 可以用StringBuilder或者StringBuffer,使用String时少用new

    3.将对象定义在循环外面,在循环内实例化

    4.数组和集合的选择,长度规定使用数组 经常删除和添加的话使用LinkedList

    5.try catch finally 优化:
    1)try、catch、finally语句中,在如果try语句有return语句,则返回的之后当前try中变量此时对应的值,此后对变量做任何的修改,都不影响try中return的返回值
    2) 如果finally块中有return 语句,则返回try或catch中的返回语句忽略。
    3)如果finally块中抛出异常,则整个try、catch、finally块中抛出异常
    所以使用try、catch、finally语句块中需要注意的是
    1)尽量在try或者catch中使用return语句。通过finally块中达到对try或者catch返回值修改是不可行的。
    2)finally块中避免使用return语句,因为finally块中如果使用return语句,会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生
    3)finally块中避免再次抛出异常,否则整个包含try语句块的方法回抛出异常,并且会消化掉try、catch块中的异常
    6.奇数判断 使用 (num&1)!=0
    因为如果一个数是偶数的话那么它二进制的最后一位就是0,这样判断的话 前面的num只有二进制最后一位是1才返回为1,这就是: 偶数&1为0,奇数&1为1

    7. 单引号和双引号之间的区别
    Java代码优化 - 图1
    结果为201201,原因是,如果使用双引号,字符串对待,但在单引号的情况下,字符自动转换为int型,进行计算。

    8.通过简单的技巧避免内存泄漏 finally块中释放使用的资源

    9.三种用于避免死锁的技术:
    1)加锁顺序
    2)加锁时限
    3)死锁检测
    一个更好的方案是给这些线程设置优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。如果赋予这些线程的优先级是固定不变的,同一批线程总是会拥有更高的优先级。为避免这个问题,可以在死锁发生的时候设置随机的优先级。

    10.JAVA运行内存的设置
    一些java应用程序可以被高度的CPU密集型以及他们需要很多内存。这样的应用程序通常运行速度慢,因为内存高的要求。所以,我们可以在相关的配置文件中进行修改调整内存大小。
    Xms = 设置内存初始化的大小
    Xmx = 设置最大能够使用内存的大小
    XX:PermSize =初始大小,将分配给JVM的启动过程
    XX:MaxPermSize = 最大尺寸可以分配JVM的启动过程

    11.时间选择 : 循环中用System.nanoTime 因为精度高,平时用System.currentTimeMillis()能和data转换
    12.float和double 要性能和内存用float,要精度高用double
    13.用<<和>>代替乘除 num>>x理解为num除以2的x次方 num<<x为num乘以2的x次方(二进制位移)

    本文转自:https://blog.csdn.net/qq_41594146/article/details/84888939 作者:beyond丿qq:1559810637