阿里巴巴开发规范文档解读(三):集合处理、控制语句

此部分算是学习笔记吧,有一点自己的心得。

(五) 集合处理
1.【强制】关于hashCode和equals的处理,遵循如下规则:
1) 只要重写equals,就必须重写hashCode。 
	i.重写equals是因为Object里面的equals方法难以满足对象的判断。
	创建两个对象,分别给他们相同的属性赋相同的值。使用equals返回的也是true,为什么还是需要重写hashCode()呢?
		一个常规协议声明相等的对象必须具有相等的哈希码。
		即:当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()也为true
2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 
3) 如果自定义对象作为Map的键,那么必须重写hashCode和equals。 
    说明:String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。
2. 【强制】泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,
	而<? super T>不能使用get方法,作为接口调用赋值时易出错。 
说明:扩展说一下PECS(Producer Extends Consumer Super)原则:
	第一、频繁往外读取内容的,适合用<? extends T>。
	第二、经常往里插入的,适合用<? super T>。
3.【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
正例:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
	String item = iterator.next();
	if (删除元素的条件) {
		iterator.remove();
	}
}
反例:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for (String item : list) {
	if ("1".equals(item)) {
		list.remove(item);
	}
}
4.【推荐】集合初始化时,指定集合初始值大小。
说明:HashMap使用HashMap(int initialCapacity) 初始化, 
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。
注意 负载因子(即loader factor)默认为 0.75,如果 暂时无法 确定 初始值大小,请设置为 16(即默认值)。 
反例: HashMap需要 放置 1024个元素, 由于 没有设置容量 初始大小,
随着元素不断增加容 量 7次被迫扩大, resize需要重建 hash表,严重影响性能。
(六) 并发控制
由于还没有在实际代码中接触过并发控制,因此只是扫了一眼,并不能理解透彻。
(七) 控制语句
1.【强制】在高并发场景中,避免使用”等于”判断作为中断或退出的条件。
说明:如果并发控制没有处理好,容易产生等值判断被“击穿”的情况,使用大于或小于的区间判断条件来代替。
反例:判断剩余奖品数量等于 0 时,终止发放奖品,但因为并发处理错误导致奖品数量瞬间变成了负数,这样的话,活动无法终止。
2.【推荐】表达异常的分支时,少用if-else方式,这种方式可以改写成:
if(){}else{} 改为 if(){}  if(){}
3. 【推荐】除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。
正例:
// 伪代码如下
	final boolean existed = (file.open(fileName, "w") != null) && (...) || (...);
	if (existed) {
		...
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值