阿里巴巴Java开发手册:编程规约.集合处理

本文介绍了Java集合处理的规范和注意事项,包括重写equals和hashCode的重要性、ArrayList子列表操作的限制、集合转数组的正确方式、避免在foreach循环中修改集合、Comparator实现的规则、集合初始化时指定大小、以及遍历Map的高效方法。遵循这些规则可以提高代码质量和性能。
摘要由CSDN通过智能技术生成

1.【强制】关于hashCode和equals的处理,遵循如下规则:

1) 只要重写equals,就必须重写hashCode。

2) 因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。

3) 如果自定义对象作为Map的键,那么必须重写hashCode和equals。

说明:String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。

当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与该位置其他已经加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。这样我们就大大减少了equals的次数,相应就大大提高了执行速度。

hashCode与equals:

如果两个对象相等,则 hashcode 一定也是相同的

两个对象有相同的hashcode值,它们不一定是相等的

两个对象相等,对两个对象分别调用equals方法都返回true

因此,equals方法被覆盖过,则hashCode方法也必须被覆盖

hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

2.【强制】ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常,即java.util.RandomAccessSubList cannot be cast to java.util.ArrayList。

说明:subList返回的是ArrayList的内部类SubList,并不是ArrayList而是ArrayList的一个视图,对于SubList子列表的所有操作最终会反映到原列表上。该方法返回的是父list的一个视图,从fromIndex(包含),到toIndex࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值