编写高质量的Java代码、良好的编程习惯,持续更新中...

编写高质量的Java代码、良好的编程习惯,持续更新中…

  1. 数组的性能往往比集合的性能更好。性能要求较高的场景中使用数组代替集合。
  2. 警惕数组的浅拷贝。非基本类型的数组可能只是拷贝了对象引用。
  3. 在明确的场景下,为集合指定初始值。
  4. Arrays.asList方法产生的对象不可更改。
  5. ArrayList是随机存取的,采用下标方式遍历更快。LinkedList使用迭代器方式更快,也就是foreach方式。
  6. 频繁插入和删除时使用LinkedList。修改元素ArrayList效率更高。
  7. List列表相等(equals)只需关心元素数据,不关心列表类型。Set,Map相同。
  8. 子列表只是原列表的一个视图,所有的修改动作直接作用于原列表。
  9. 生成子列表后不要再操作原列表。
  10. 实现了compareTo,就应该复写equals方法,确保两者同步,即a.equals(b),则a.compareTo(b)应该返回0。
  11. 使用List接口提供的函数,实现并集、交集、差集、无重复的并集。
  12. Collections.shuffle(List)可以打乱集合的顺序。
  13. SortedSet只有在加入元素时回排序,改变元素的成员变量时不会重新排序。
  14. Java集合包括:List、Set、Map、Queue、数组,JDK有Arrays和Collections工具类,JDK之外的优秀的数据集合工具包有Apache的commons-collections,谷歌的google-collections,都可以拿来使用。
  15. 推荐使用枚举类定义常量。枚举项应全部大写,下划线分割。适当添加枚举项的属性。
  16. switch可以使用枚举类型和字符串,小心空指针异常。switch(null)会出现空指针异常。
  17. switch的default用于处理预期之外的选项,最好都加上,并返回异常结果。
  18. 有时将工厂方法设计为枚举类型更简洁。
  19. 注解了@Inherited元注解的注解标注到了父类,所有子类都会自动具有与父类相同的注解(注解继承),弊大于利。
  20. 使用泛型类时,声明泛型的实际类型。
  21. 反射访问属性或方法时将Accessible设置为true。由于取消了安全检查,也可以运行private方法、访问private私有属性了,设置Accessible为true可以提升性能20倍以上。
  22. 不要在finally块中处理返回值。
  23. 不要在构造函数中抛出异常。
  24. 异常只为异常情况服务,不能代替正常逻辑,比如用于判断等。
  25. volatile不能保证数据是同步的,只能保证线程能够获得最新值。
  26. 显式锁Lock的锁定和释放必须在一个try……finally块中,这是为了确保即使出现运行期异常也能正常释放锁,保证其他线程能够顺利执行;Lock支持更细粒度的锁控制;Lock是无阻塞锁(未获得锁则等待,为不是阻塞),synchronized是阻塞锁;Lock可实现公平锁,synchronized只能是非公平锁;Lock是代码级的,synchronized是JVM级的;灵活、强大则选择Lock,快捷、安全则选择synchronized。
  27. 预发线程死锁(死锁条件:互斥条件、资源独占条件、不剥夺条件、循环等待条件)。
  28. 使用CountDownLatch协调子线程。
  29. CyclicBarrier让多线程齐步走。CyclicBarrier关卡可以让所有线程全部处于等待状态(阻塞),然后在满足条件的情况下继续执行,这就好比是一条起跑线,不管是如何到达起跑线的,只要到达这条起跑线就必须等待其他人员,待人员到齐后再各奔东西,CyclicBarrier关注的是汇合点的信息,而不在乎之前或之后做何处理。
  30. 可以通过“java-Xss ”设置栈内存大小来解决此类问题。
  31. 堆内存的调整不能太随意,调整得太小,会导致Full GC频繁执行,轻则导致系统性能急速下降,重则导致系统根本无法使用;调整得太大,一则是浪费资源(当然,若设置了最小堆内存则可以避免此问题),二则是产生系统不稳定的情况,例如在32位的机器上设置超过1.8GB的内存就有可能产生莫名其妙的错误。(设置堆内存:java -Xmx1536 -Xms1024)。
  32. 一般情况下,新生区和养老区的比例为1:3左右,设置命令如下:java -XX:NewSize=32m -XX:MaxNewSize=640m -XX:MaxPernSize=1280n -XX:NewRatio=5。
  33. 合理设置GC的垃圾回收策略。
  34. 推荐使用Guava扩展工具包。
  35. 推荐使用Joda日期时间扩展包。
  36. 良好的代码风格:整洁、统一、流行、便。
  37. 正确、清晰、简洁的注释。包括法律版权、解释意图、警示、TODO。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值