1.不要使用一个常量类维护所有常量,应该按常量功能进行归类
2.序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID
3.对象的clone方法默认是浅拷贝,若想实现深拷贝需要重写clone方法实现属性对象的拷贝
4.类非static成员变量并且与子类共享,必须为protected;
类非static成员变量并且仅在本类使用,必须是private;
类static成员变量如果仅在本类使用,必须是private
5.只要重写equals,就必须重写hashcode;set存储的是不重复的对象,依据hashcode和equals进行判断,所以set存储的对象必须重写这两个方法;如果自定义对象作为map的键,那么必须重写hashcode和equals
6.ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常:subList返回的是ArrayList的内部类SubList,不是ArrayList,而是ArrayList的一个试图,对于SubList子列表的所有操作最终会反映到原列表上
7.使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小是list.size();
直接使用toArray无参方法存在问题,此方法返回值只能是Object[]类,若强转其他类型数组将出现ClassCastException错误;
使用toArray带参方法,入参分配的数组空间不够大时,toArray方法内部将重新分配内存空间,并返回新数组地址,因此最好将方法入参数组大小定义与集合个数一致
8.asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法,体现的是适配器模式,只是转换借口,后天的数据仍然是数组
9.泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法:苹果装箱后返回一个<? extends Fruits>对象,此对象就不能往里加任何水果,包括苹果
10.不要在foreach循环里进行元素的remove/add操作,remove请使用iterator,如果并发操作,需要对iterator对象加锁