优化:02-编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串。
需求:
1.代码运行无问题,现在就是想优化。
2.处女座,追求完美,如果瑕疵的地方一律指出。
3.2020年先定一个小目标,先来100道。
题目:
1.编写一个lrc歌词程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串。
2.例如,根据内容为[1][2][3]的数组形成内容为"1,2,3"的字符串。
代码:
public
class
TwoDemo {
public
static
void
main(String[] args) {
// 创建一个整数数组
int
[] array =
new
int
[] {
1
,
2
,
3
,
4
};
// 构建一个StringBuilder(可变的字符串序列)
StringBuilder sb =
new
StringBuilder();
// array.length的长度为4
for
(
int
i =
0
; i < array.length -
1
; i++) {
sb.append(array[i] +
","
);
// 程序最后结果为1,2,3,
}
sb.append(array[array.length -
1
]);
// 将最后一个元素单独加上,解决末尾有","问题
System.out.println(sb);
// 结果为:1,2,3,4
}
}
1.StringBuilder也是需要扩容的,既然是传入的一个数组,所以字符串长度是确定的,可以改为 StringBuilder sb = new StringBuilder((array.length<<1)-1),避免数组长度过大 时StringBuilder需要多次扩容
2.sb.append(array[i] + ","),你既然用到了StringBuilder,就是不想用字符串拼接,建议改成sb.append(array[i]).append(",")
这是多线程下的拼接结果
因为我了解到的是StringBuffer比StringBuilder快,但是没有StringBuilder安全。如果只是考虑速度的话,当然是用StringBuffer,只考虑安全的,就是StringBuilder用的多了,我是这样理解的。
嗯,你的理解没错,所以我更注重安全一点,虽然StringBuilder比StringBuffer快,但这并不代表StringBuffer很慢,单线程,数据量大用StringBuilder,多线程,数据量不算太大用StringBuffer
感谢您的回答
01我温习了二进制,了解了"<<:是逻辑左移,右边补0",array.length的长度是4,二进制码是0100,array.length<<1的长度是8,<<表示将1左移一位,二进制码是1000。
02为什么用append而不用+?在循环中使用+=会创建多个StringBuilder对象,效率低,而使用append(),只会创建一个。
你说反了吧,StringBuffer是线程安全的,单线程中还是StringBuilder更好点