惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Help Net Security
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
博客园 - Franky
B
Blog RSS Feed
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
量子位
V
Visual Studio Blog
Y
Y Combinator Blog
小众软件
小众软件
N
Netflix TechBlog - Medium
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网

LeetCode

力扣 leetcode 开学优惠,刷题搭子看过来! - V2EX 二分查找 mid 什么时候要加 1 大家知道哔站或者 Youtube 上有木有出 leetcode 刷题讲解视频的博主? leetcode 到达 1000 题了🎉 为什么打开 leetcode 中文网要验证手机号啊,能不验证吗 为什么要刷算法? 靓仔们,刷的第一个道 leetcode 题是什么哇 Leecode 组队刷题 2018 年之前大家怎么准备的面试? 142. 环形链表 II 我这么写为什么有个 case 无法通过 各位都是怎么刷题的 leetcode 第 402 题,移除 K 位数字 的疑问 你力扣做几题了?做题数还能衡量水平吗?我做了很多题还是很菜 leetcode-cn 年费会员 20%off Leetcode 刷题记录 LeetCode 有史以来最简单的题目 一直很好奇 leetcode 是怎么判断随机算法的正误的 你们会在意执行用时和内存消耗吗? leetcode 502badgateway 了? 开心,参加 Weekly Contest 270 不到 1 小时解决了 3 题, Q3 最后几十秒提交一次性通过 刷题,组队 早安刷题 leetcode 33 解法求解释 大家刷题,是去中文的 leetcode-cn.com,还是去 leetcode.com?貌似还有一个山寨的 lintcode 刷同一类题型真是很不错的方法 leetcode 1758 3 个月 了 刷了 51 道题 平均每道题 3 种左右的方法 区间合并 断断续续想了 2 天 执行时间竟然 100% 两次提交 代码没有变动 竟然时间还不一样 一起来刷题
LeetCode 中使用 StringBuilder 连接字符串为什么会比用+号连...
kuretru · 2021-01-10 · via LeetCode

今日 LeetCode 的每日一题,代码很简单,官方的题解如下:

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> ret = new ArrayList<String>();
        int i = 0;
        int n = nums.length;
        while (i < n) {
            int low = i;
            i++;
            while (i < n && nums[i] == nums[i - 1] + 1) {
                i++;
            }
            int high = i - 1;
            StringBuffer temp = new StringBuffer(Integer.toString(nums[low]));
            if (low < high) {
                temp.append("->");
                temp.append(Integer.toString(nums[high]));
            }
            ret.add(temp.toString());
        }
        return ret;
    }
}

可以看到官方使用 StringBuffer 来连接字符串,在不需要考虑线程安全的环境,毫无疑问可以使用 StringBuilder 来代替,但是问题在于,为什么使用+号来连接的效果会比 StringBuilder 及 StringBuffer 差?

String temp = Integer.toString(nums[low]);
if (low < high) {
temp += "->" + Integer.toString(nums[high]);
}
ret.add(temp);

两者的差别为:
StringBuilder/StringBuffer:执行用时:0 ms, 在所有 Java 提交中击败了 100.00%的用户
+号连接:执行用时:8 ms, 在所有 Java 提交中击败了 70.02%的用户
同样的代码在本地各循环 1000 万次的结果为
JDK 1.8(与 LeetCode 相同):7708ms vs 7287ms
JDK 11:7320ms vs 4511ms