StringBuffer和之间的主要区别是StringBuilder什么?在决定其中任何一个时,是否存在任何性能问题?
我最近遇到了一个我以前没见过的成语:StringWriter和PrintWriter的字符串汇编.我的意思是,我知道如何使用它们,但我一直使用StringBuilder.是否有一个具体的理由选择一个而不是另一个?StringBuilder方法对我来说似乎更自然,但它只是风格吗?
我在这里看了几个问题(包括最近的一个问题:StringWriter或StringBuilder),但没有一个问题的答案实际上解决的问题是,是否有理由优先选择一个而不是简单的字符串汇编.
这是我见过并习惯了很多次的成语:StringBuilder的字符串汇编:
public static String newline = System.getProperty("line.separator");
public String viaStringBuilder () {
StringBuilder builder = new StringBuilder();
builder.append("first thing").append(newline); // NOTE: avoid doing builder.append("first thing" + newline);
builder.append("second thing").append(newline);
// ... several things
builder.append("last thing").append(newline);
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
这是新的成语:StringWriter和PrintWriter的字符串汇编:
public String viaWriters() {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
printWriter.println("first thing");
printWriter.println("second thing");
// ... several things
printWriter.println("last thing");
printWriter.flush();
printWriter.close();
return stringWriter.toString();
}
Run Code Online (Sandbox Code Playgroud)
编辑似乎没有具体的理由偏爱其中一个,所以我接受了最符合我理解的答案,并且+ 1除了所有其他答案.另外,我发布了自己的答案,给出了我运行的基准测试结果,以回答其中一个答案.谢谢大家.
再次编辑事实证明,有是 …
java.io有许多不同的I/O流,(FileInputStream,FileOutputStream,FileReader,FileWriter,BufferedStreams ......等),我很困惑,在确定它们之间的差异.有哪些例子表明一种流类型优先于另一种流类型,它们之间的真正区别是什么?
我正在解决这个问题:
小女孩和最大总和
小女孩非常喜欢阵列查询的问题.
有一天,她遇到了一个众所周知的问题:你有一个n个元素的数组(数组的元素从1开始索引); 另外,有q个查询,每个查询由一对整数li,ri(1≤li≤ri≤n)定义.您需要为每个查询找到具有从li到ri(包括)的索引的数组元素的总和.
小女孩发现问题相当无聊.她决定在回复查询之前重新排序数组元素,使查询回复的总和最大化.您的任务是找到此最大总和的值.
输入第一行包含两个空格分隔的整数n(1≤n≤2·105)和q(1≤q≤2·105) - 数组中的元素数和相应的查询数.
下一行包含n个空格分隔的整数ai(1≤ai≤2·105) - 数组元素.
以下q行中的每一行包含两个空格分隔的整数li和ri(1≤li≤ri≤n) - 第i个查询.
输出在单行中打印单个整数 - 重新排序数组元素后查询答复的最大总和.
使用测试7(请参阅问题末尾的测试结果),输入是一个大小为200,000且包含200,000个查询(具有r和l值)的数组.
输入看起来像这样:
200000 200000
189622 189286 194361 184457 182376 183471 197548 184736 195806 ... 200,000 integers
188738 290041
33738 90041
122738 390041
... 200,000 line
Run Code Online (Sandbox Code Playgroud)
您可以下载示例输入文件,也可以创建自己的示例输入.数字本身并不重要.
我需要读取600,000条输入线,而不超过2秒的执行时间.问题是,它甚至没有在2秒内读取前200,000输入.
如何在2秒内加速我的代码读取所有600,000输入?
这是我的第一次尝试:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int …Run Code Online (Sandbox Code Playgroud)