昨天由于某种不便说原因,没刷道题。
今天也是如此,但是想着上次还欠着一个东西没有说清楚,于是特定上来学习。
string、stringbuffer和stringbuilder
在上次的题目中,作者使用了string来存储数据,虽然通过了,但结果并不理想。作者学习了排名靠前的方法,发现他们都是用的stringbuilder方法,于是今天特开一个文章来说明这三者之间的关系。
首先,他们有一个很明显的区别就是,string是不可变的,而stringbuffer和stringbuilder是可变的。看到这个或者大家会很疑惑,明明代码中用到了temp = temp + num。具体来说,这个语句是开辟了三次内存空间了,不仅造成了空间浪费,还拖慢了速度。换一种说法,java中对string的操作就是不断创建新对象和回收旧对象的过程,所以非常慢。而stringbuffer和strignbuilder都是可变的。
第二个问题来了,stringbuffer和stringbuilder有什么区别呢?
具体来说,它们的区别主要体现在线程安全性上。stringbuffer对方法添加了同步锁,所以是安全的,但相对来说效率就比stringbuilder慢了。所以一般情况下,大家都会选择使用stringbuilder,除非在多线程的情况下会考虑stringbuffer。
对于这三种类型,各有各有好处,他们的适用条件如下:
1.string适用于少量的字符串操作。
2.stringbuffer适用于单线程下在字符缓冲区进行大量操作。
3.stringbuilder适用于多线程下在字符缓冲区进行大量操作。
因此,我们来学一下大神的做法吧。
class Solution {
public String countAndSay(int n) {
String res = "1";
for(int i = 1;i < n;i++){
StringBuilder sb = new StringBuilder();
int count = 1;
char pre = res.charAt(0);
for(int j = 1;j < res.length();j++){
char c = res.charAt(j);
if(c == pre){
count++;
}else{
sb.append(count).append(pre);
count = 1;
pre = c;
}
}
sb.append(count).append(pre);
res = sb.toString();
}
return res;
}
}
可以看出,思路是差不多的,只不过使用方法有差异,导致最后的时间和空间差异。
stringbuilder的使用
创建
StringBuilder sb = new String();
插入
sb.append();
转换为字符
sb.toString();
好了,今天暂时先到这里。
来源:CSDN
作者:jed_joanky
链接:https://blog.csdn.net/jed_joanky/article/details/104253708