文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

十个提升Java代码性能的技巧

2024-11-28 14:02

关注

1. 使用StringBuilder拼接字符串

如果你在循环中拼接字符串,最好使用StringBuilder。使用+操作符时,Java每次都会创建一个新的字符串,这可能会降低效率,请不要写成如下样态。

String result = "";
for (String s : words) {
    result += s;
}

不妨尝试使用StringBuilder。

StringBuilder result = new StringBuilder();
for (String s : words) {
    result.append(s);
}
String finalResult = result.toString();

2. 尽可能重用对象

每次创建新对象都会消耗大量内存和时间。我们应尽可能重用对象。需要注意的是,我们也应该明智地使用它们,比如只在对象状态频繁变化或生命周期需要多次使用时才这样做。示例如下。

// 一次性创建对象
MyClass obj = new MyClass();
for (int i = 0; i < 1000; i++) {
    obj.doSomething();
}

3. 使用原始类型而不是包装类

我们需要意识到Integer、Double和Boolean比原始数据类型如int、double和boolean慢。因此,我们需要避免冗余地使用它们。所以,优先选择:

int number = 5;

而不是:

Integer number = new Integer(5);

4. 选择合适的数据结构

当你需要快速操作时,选择HashMap或HashSet而不是List。示例如下。

Set names = new HashSet<>();
names.add("Alice");
names.add("Bob");
if (names.contains("Alice")) {
    // 执行操作
}

5. 避免不必要的类型转换

类型转换可能会降低效率。如果你知道你正在处理的对象类型,尽量避免转换它们。不要这样做。

Object obj = "Hello";
String str = (String) obj;

而是直接:

String str = "Hello";

6. 缓存常用值

缓存可能是双刃剑,所以我们需要明智地使用它。我们不应该过度缓存,也不应该完全避免它。但是,当需要进行繁重的计算或频繁访问通常不会改变的数据时,我们应该使用缓存。示例缓存可能是双刃剑,所以我们需要明智地使用它。我们不应该过度缓存,也不应该完全避免它。但是,当需要进行繁重的计算或频繁访问通常不会改变的数据时,我们应该使用缓存。示例如下。

Map cache = new HashMap<>();
int getFactorial(int n) {
    if (cache.containsKey(n)) {
        return cache.get(n);
    } else {
        int result = calculateFactorial(n);
        cache.put(n, result);
        return result;
    }
}

7. 限制同步的使用

在多线程程序中,同步可能会导致延迟。只在必要时使用,并保持同步块简短。示例如下。

synchronized (this) {
    // 只有需要同步的关键部分
    sharedResource.update();
}

8. 小心循环中的异常

抛出和捕获异常比常规代码执行慢。尽量避免在循环中使用它们。不要这样做。

for (int i = 0; i < data.length; i++) {
    try {
        process(data[i]);
    } catch (Exception e) {
        // 处理异常
    }
}

而是在处理之前验证:

for (int i = 0; i < data.length; i++) {
    if (isValid(data[i])) {
        process(data[i]);
    }
}

但如果问题出在数据本身,你应该在处理之前过滤或验证数据。

Stream.of(data)
      .filter(this::isValid)
      .forEach(this::process);

所以,根据你的具体情况选择最佳方法。

9. 使用高效的循环

编写循环的方式可能会有所不同。例如,遍历列表时,如果可能,使用带索引的循环。示例如下。

for (int i = 0; i < list.size(); i++) {
    doSomething(list.get(i));
}

10. 为工作选择最易读的循环

使用Java Streams可以使你的代码更清晰、更容易理解。使用for-each的例子如下。

for (String item : list) {
    doSomething(item);
}

使用Streams的例子如下。

list.stream().forEach(item -> doSomething(item));
来源:Java学研大本营内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯