StringBuffer
和之间的主要区别是StringBuilder
什么?在决定其中任何一个时,是否存在任何性能问题?
java中是否有一种方法可以创建具有指定数量的指定字符的字符串?在我的例子中,我需要创建一个包含10个空格的字符串.我目前的代码是:
StringBuffer outputBuffer = new StringBuffer(length);
for (int i = 0; i < length; i++){
outputBuffer.append(" ");
}
return outputBuffer.toString();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来完成同样的事情.特别是我想要一些快速的(在执行方面).
像Java这样的Python中有什么东西StringBuffer
吗?由于字符串在Python中也是不可变的,因此在循环中编辑它们效率很低.
Java中的String和StringBuffer有什么区别?
String的最大大小是多少?
在"有效的Java"一书中,Josh Bloch说
StringBuffer在很大程度上已经过时,应该被非同步实现'StringBuilder'取代
.
但根据我的经验,我仍然看到StringBuffer类的广泛使用.为什么StringBuffer类现在已经过时,为什么StringBuilder优先于StringBuffer,除非由于非同步而提高了性能?
据我所知,
可以更改可变字符串,并且不能更改不可变字符串.
在这里,我想像这样更改String的值,
String str="Good";
str=str+" Morning";
Run Code Online (Sandbox Code Playgroud)
和其他方式是,
StringBuffer str= new StringBuffer("Good");
str.append(" Morning");
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我试图改变其价值str
.任何人都可以告诉我,这两种情况有什么不同,并给我清晰的可变和不可变对象的图片.
我正在从我的电子书中粘贴这个文本.它说O(n 2)的复杂性,并给出了解释,但我没有看到如何.
问题:此代码的运行时间是多少?
public String makeSentence(String[] words) {
StringBuffer sentence = new StringBuffer();
for (String w : words) sentence.append(w);
return sentence.toString();
}
Run Code Online (Sandbox Code Playgroud)
这本书的答案是:
O(n 2),其中n是句子中的字母数.原因如下:每次将一个字符串附加到句子上时,您创建一个句子副本并遍历句子中的所有字母以将其复制如果您必须在循环中每次迭代最多n个字符,并且您是循环至少n次,这给你一个O(n 2)运行时间.哎哟!
有人可以更清楚地解释这个答案吗?
任何人都可以帮助我并告诉如何将char
数组转换为列表,反之亦然.我正在尝试编写一个程序,用户输入一个字符串(例如"Mike is good"
),在输出中,每个空格都被"%20"
(Ie "Mike%20is%20good"
)替换.虽然这可以通过多种方式完成,但由于插入和删除在链表中需要O(1)时间,我想用链表进行尝试.我正在寻找将char
数组转换为列表,更新列表然后将其转换回来的方法.
public class apples
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
StringBuffer sb = new StringBuffer(input.nextLine());
String s = sb.toString();
char[] c = s.toCharArray();
//LinkedList<char> l = new LinkedList<char>(Arrays.asList(c));
/* giving error "Syntax error on token " char",
Dimensions expected after this token"*/
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在这个程序中的用户输入字符串,这是我在我存储StringBuffer
,这我先转换为字符串,然后到一个char
数组,但我没能获得一个列表l
从s
.
如果有人可以告诉正确的方法将char
数组转换为列表,反之亦然,我将非常感激.
我知道Javac编译器能够+
使用StringBuilder
/ 来转换字符串连接StringBuffer
,并且我很想知道从哪个版本引入了这个更改?
我正在使用此示例代码:
public class Main {
public static void main(String[] args) {
String a = args[0];
String s = "a";
s = s + a;
s = s + "b";
s = s + "c";
s = s + "d";
s = s + "e";
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经试过javac 1.8.0_121
,javac 1.6.0_20
,javac 1.5.0_22
和java 1.4.2_19
.
这里是字节码我看到使用的样本javap -c
来自1.4.2_19
:
6: astore_2
7: new …
Run Code Online (Sandbox Code Playgroud) 我已经搜索了这个,但是我找不到为什么StringBuilder的ensureCapacity()
方法不会通过加倍来延长旧容量,而是添加两个.
因此,当默认容量16已满时,下一个加长值将为34,除非整个字符串长度不超过34.为什么不应该是32?
我最好的猜测是考虑一个空字符'\ u0000',但我不确定.谁能告诉我为什么?