您现在的位置是:主页 > Web前端技术 > Web前端技术

怎么写Java让代码性能更高编程语言

IDCBT2022-01-07服务器技术人已围观

简介这篇文章主要介绍“怎么写Java让代码性能更高”,在日常操作中,相信很多人在怎么写Java让代码性能更高问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大

这篇文章主要介绍“怎么写Java让代码性能更高”,在日常操作中,相信很多人在怎么写Java让代码性能更高问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么写Java让代码性能更高”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

需要 Map 的主键和取值时,应该迭代 entrySet()

当循环中只需要 Map 的主键时,迭代 keySet() 是正确的。但是,当需要主键和取值时,迭代 entrySet() 才是更高效的做法,比先迭代  keySet() 后再去 get 取值性能更佳。

反例:

Map<String, String> map = ...; for (String key : map.keySet()) {     String value = map.get(key);     ... }

正例:

Map<String, String> map = ...; for (Map.Entry<String, String> entry : map.entrySet()) {     String key = entry.getKey();     String value = entry.getValue();     ... }

应该使用Collection.isEmpty()检测空

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

反例:

if (collection.size() == 0) {     ... }

正例:

if (collection.isEmpty()) {     ... }

如果需要还需要检测 null  ,可采用CollectionUtils.isEmpty(collection)和CollectionUtils.isNotEmpty(collection)。

不要把集合对象传给自己

此外,由于某些方法要求参数在执行期间保持不变,因此将集合传递给自身可能会导致异常行为。

反例:

List<String> list = new ArrayList<>(); list.add("Hello"); list.add("World"); if (list.containsAll(list)) { // 无意义,总是返回true     ... } list.removeAll(list); // 性能差, 直接使用clear()

集合初始化尽量指定大小

java 的集合类用起来十分方便,但是看源码可知,集合也是有大小限制的。每次扩容的时间复杂度很有可能是 O(n)  ,所以尽量指定可预知的集合大小,能减少集合的扩容次数。

反例:

int[] arr = new int[]{1, 2, 3}; List<Integer> list = new ArrayList<>(); for (int i : arr) {     list.add(i); }

标签:

很赞哦! ()

本栏推荐