开发者社区> 问答> 正文

集合需要如何设置以提升Java高效程度?

已解决

集合需要如何设置以提升Java高效程度?

展开
收起
游客lmkkns5ck6auu 2022-10-26 19:08:26 463 0
1 条回答
写回答
取消 提交回答
  • 推荐回答
    1. 初始化集合时,尽量指定集合大小 Java 代码高效之道 334 Java 集合初始化时都会指定一个默认大小,当默认大小不再满足数据需求时就会扩 容,每次扩容的时间复杂度有可能是 O(n)。所以,尽量指定预知的集合大小,就 能避免或减少集合的扩容次数。

    2. 不要使用循环拷贝集合,尽量使用 JDK 提供的方法拷贝集合 JDK 提供的方法可以一步指定集合的容量,避免多次扩容浪费时间和空间。同时, 这些方法的底层也是调用 System.arraycopy 方法实现,进行数据的批量拷贝效率 更高。

    3. 尽量使用 Arrays.asList 转化数组为列表 原理与“不要使用循环拷贝集合,尽量使用 JDK 提供的方法拷贝集合”类似。

    4. 直接迭代需要使用的集合 直接迭代需要使用的集合,无需通过其它操作获取数据。

    5. 不要使用 size 方法检测空,必须使用 isEmpty 方法检测空 使用 size 方法来检测空逻辑上没有问题,但使用 isEmpty 方法使得代码更易读,并 且可以获得更好的性能。任何 isEmpty 方法实现的时间复杂度都是 O(1),但是某 些 size 方法实现的时间复杂度有可能是 O(n)。

    6. 非随机访问的 List,尽量使用迭代代替随机访问 对于列表,可分为随机访问和非随机访问两类,可以用是否实现 RandomAccess 接 口判断。随机访问列表,直接通过 get 获取数据不影响效率。而非随机访问列表, 通过 get 获取数据效率极低。

    其实,不管列表支不支持随机访问,都应该使用迭代进行遍历。 7. 尽量使用 HashSet 判断值存在 在 Java 集合类库中,List 的 contains 方法普遍时间复杂度是 O(n),而 HashSet 的时间复杂度为 O(1)。如果需要频繁调用 contains 方法查找数据,可以先将 List 转换成 HashSet。

    1. 避免先判断存在再进行获取 如果需要先判断存在再进行获取,可以直接获取并判断空,从而避免了二次查找操 作。

    以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版

    2022-10-26 20:46:33
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载