欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-21 16:25:42
...

前言: 温故而知新。
之前阅读过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.反射

待补充