手册下载链接:https://pan.baidu.com/s/1s8esZSYZbRQW2IAQk3wZuw 提取码:i6ui
1、集合处理
只要覆写 equals,就必须覆写 hashCode
因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须覆写这两个方法
如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals
ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出异常
使用 Map 的方法 keySet()/values()/entrySet() 返回集合对象时,不可以对其进行添加元素操作,否则会抛出异常
Collections 类返回的对象,如:emptyList()/singletonList() 等都是 immutable list,不可对其进行添加或者删除元素的操作
在 subList 场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生异常
使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为 0 的空数组
在使用 Collection 接口任何实现类的 addAll() 方法时,都要对输入的集合参数进行 NPE 判断
使用工具类 Arrays.asList() 把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出异常
泛型通配符 <? extends T> 来接收返回的数据,不能使用 add 方法,<? super T> 不能使用 get 方法,作为接口调用赋值易出错
PECS原则:第一、频繁往外读取内容的,适合用 <? extends T> ,第二、经常往里插入的,适合用 <? super T>
在无泛型限制定义的集合赋值给泛型限制的集合时,在使用集合元素时,需要进行 instanceof 判断,避免抛出异常
不要在 foreach 循环里进行元素的 remove/add 操作,remove 元素使用 Iterator 方式,如果并发操作,需要对 Iterator