《编写高质量代码之JAVA》阅读摘要-基础篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013128262/article/details/82320928

前言: 温故而知新。
之前阅读过Python版本的《编写高质量代码》,收获颇丰。在此,我分享下我的部分阅读笔记,供大家参考。

通用方法与准则

1.自增陷阱

count = count++;
  • i++:先赋值后加1
  • ++i:先加1后赋值

c++里面,如上写法是ok的,但是java里面这是一个表达式,返回值是count 自加前的值,所以上述写法有误。

2.静态导入问题

3.break

switch case用法里一定要加break

4.异变业务逻辑部分使用脚本语言

如Groovy

5.动态编译

慎用,损失性能

6.instanceof

判断一个对象是否是某个类的实例

boolean b = new String() instanceof String

7.断言(Assertion)

  • 防御式编程写法,默认不启用
  • 可以避免不恰当的输入,或者错误环境而产生的逻辑异常。
assert str !=null;

基本类型

8.用偶判断

i%2==0?"偶数":"奇数"

9.包装类型

需要谨慎:

  • null值处理
  • 比大小

包装类型本质是类

10.随机数

  • Math.random 方法
  • Random类

注意不要暴露随机种子

11.静态变量

类加载时分配到数据区,内存中只有一个拷贝

12.gc

不确定的情况下,避免主动gc

字符串

13.字符串池(String Pool)

创建字符串时,检查池中是否有字面相等的值。

String a = "中国";  # 使用字符串池,减少内存占用
new String("中国"); # 不检查,不放入 字符串 池

14.String是线程安全的

15. StringUtils

xxx.replaceAll(sub,”“); 等

16.String 与 StringBuffer 、 StringBuilder

  • String:性能最高,适合长度不变场景
  • StringBuffer:可变字符序列,使用多线程场景,线程安全
  • StringBuilder:线程不安全,性能高,适合SQL拼装、JSON拼装场景

17.字符串拼接

  • +号: 最符合思维习惯,性能低
  • concat
  • StringBuilder和StringBuffer的append方法,性能极高

数组与集合

18.数组与集合的性能

  • 基础类型: 在栈内存中操作,速度快,容量小
  • 对象:堆内存中操作,速度慢,容量大

19.ArrayList

  • 大小可变的数组(底层仍然是数组)
  • 初始化容量,显著提升性能
 new ArrayList<String>(75);  # 1.5倍问题
  • Vector是ArrayList的多线程版本

20.Array

  • Arrays.sort(data.clone()); 给int[] 的data排序
  • Arrays.asList();返回的是一个长度不可变的list

21.foreach写法

java中foreach是iterator迭代器。

引申: 遍历方法的选择

22.LinkedList

是一个双向列表,与ArrayList相比:

  • 删除动作,比ArrayList快20倍
  • 插入动作,LinkedList占优
  • 修改动作,LinkedList比ArrayList慢几个数量级
  • add操作,五五开

23.List相等问题

满足两个条件:

  • 元素相等
  • 长度相等

24.List检索问题

  • {List}.indexOf(“值”); —本质是遍历
  • Collections.binarySearch({List},”值”);

binarySearch的前提:数据集已经实现升序排序

25.HashMap

  • 键值对存储结构
  • 元素不宜过多(存储放大)
  • 底层也是数组,查询时比ArrayList快40+倍
  • 增加元素前会计算hash值
  • HashMap与HashTable,HashTable是线程安全的,其他几乎一样。

26.Set与List

最大区别:Set中元素不可重复
TreeSet: 默认排序的Set集合

枚举与注解

27.枚举

  • 数量限制在64个以内
  • 注解+枚举,实现强大的功能

28.override注解

注意不同jdk版本的区别

反射与泛型

29. 泛型

编译时擦除类型

30.反射

待补充

阅读更多
换一批

没有更多推荐了,返回首页