- 所有相同类型的包装类对象之间值的比较,全部使用equals方法比较。
说明:Integer var = ? 在-128~127范围的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间的Integer值可以直接使用==进行判断,但是在这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,推荐使用equals方法判断。
2. 关于hashCode和equals的处理,遵循以下规则:
3. ArrayList的subList结果不可强转成ArrayList
4. 使用集合转数组,必须使用集合的toArray(T[ ] array),传入的是类型一样的数组,大小为list.size()。
5. 使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合的相关方法,add/remove/clear方法会抛异常。
说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组。
6. 泛型通配符<? extends T>来接收返回到数据,此写法的泛型集合不能使用add方法,而<? super T> 不能使用get方法,作为接口调用赋值时易出错。
PECS(Producer Extends Consumer Super)原则:
第一、频繁往外读取内容的,适合于<? extends T>。
第二、经常往里插入的,适合于<? super T>。
7. 不要在foreach循环里进行元素的remove/add操作。remave元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁
8. 合理利用集合的有序性(sort)和稳定性(order),避免集合的无序性(unsort)和不稳定性(unorder)带来的影响。
9. SimpleDateFormat 是线程不安全的类,一般不要定义为static变量。注意线程安全,使用DateUtils.
10. 小数类型为decimal,禁止使用float和double
说明:float和double在存储的时候,存在精度丢失问题,如果存储的范围超过decimal时,建议将数据拆成整数和小数分开存储。
11. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义类型为text,独立出一张表,用主键来对应,避免影响其他字段索引效率。
12. 表必备三字段:id,gmt_create,gmt_modified.
说明:其中id必为主键,类型为unsigned bigint、单表时自增,步长为1.gmt_create, gmt_modified类型为date_time类型,前者现在时表示主动创建,后者过去分词表示被动更新。
13. 字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:
1)不是频繁修改的字段
2)不是varchar超长字段,更不能是text字段。