初始化集合时,尽量指定集合大小 Java 代码高效之道 334 Java 集合初始化时都会指定一个默认大小,当默认大小不再满足数据需求时就会扩 容,每次扩容的时间复杂度有可能是 O(n)。所以,尽量指定预知的集合大小,就 能避免或减少集合的扩容次数。
不要使用循环拷贝集合,尽量使用 JDK 提供的方法拷贝集合 JDK 提供的方法可以一步指定集合的容量,避免多次扩容浪费时间和空间。同时, 这些方法的底层也是调用 System.arraycopy 方法实现,进行数据的批量拷贝效率 更高。
尽量使用 Arrays.asList 转化数组为列表 原理与“不要使用循环拷贝集合,尽量使用 JDK 提供的方法拷贝集合”类似。
直接迭代需要使用的集合 直接迭代需要使用的集合,无需通过其它操作获取数据。
不要使用 size 方法检测空,必须使用 isEmpty 方法检测空 使用 size 方法来检测空逻辑上没有问题,但使用 isEmpty 方法使得代码更易读,并 且可以获得更好的性能。任何 isEmpty 方法实现的时间复杂度都是 O(1),但是某 些 size 方法实现的时间复杂度有可能是 O(n)。
非随机访问的 List,尽量使用迭代代替随机访问 对于列表,可分为随机访问和非随机访问两类,可以用是否实现 RandomAccess 接 口判断。随机访问列表,直接通过 get 获取数据不影响效率。而非随机访问列表, 通过 get 获取数据效率极低。
其实,不管列表支不支持随机访问,都应该使用迭代进行遍历。 7. 尽量使用 HashSet 判断值存在 在 Java 集合类库中,List 的 contains 方法普遍时间复杂度是 O(n),而 HashSet 的时间复杂度为 O(1)。如果需要频繁调用 contains 方法查找数据,可以先将 List 转换成 HashSet。
以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。