腾讯网网站网址,商丘网红排行榜,免费注册126邮箱,wordpress相册效果在算法比赛中#xff0c;不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全#xff0c;有大量同步操作#xff0c;读取输入时每次都要解析数据类型#xff0c;处理大数据量时性能开销大、效率低#xff0c;易使程序超时间限制。System.out.println() 每次调用…在算法比赛中不推荐使用 Scanner 和 System.out.println()。Scanner 线程安全有大量同步操作读取输入时每次都要解析数据类型处理大数据量时性能开销大、效率低易使程序超时间限制。System.out.println() 每次调用都刷新输出缓冲区缺乏有效缓冲机制处理大量输出时频繁 I/O 操作会成性能瓶颈降低输出效率影响比赛成绩。
为了提高效率我们可以使用BufferedReader、StreamTokenizer来处理输入使用PrintWriter来处理输出。
规定数据量
BufferedReader
BufferedReader 是 Java 中用于读取字符流的缓冲输入流它可以一次读取多个字符到缓冲区中从而减少了与底层输入源的交互次数提高了读取效率。
StreamTokenizer
StreamTokenizer 是一个用于解析输入流的实用工具类它可以将输入流分解为一个个的标记token如数字、单词等。结合 BufferedReader 使用可以更方便地读取不同类型的数据。
PrintWriter
PrintWriter 是一个用于输出字符流的类它提供了方便的格式化输出方法并且可以进行缓冲从而提高输出效率。
假设我们要读取多个整数计算它们的和并输出结果。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;public class LargeDataExample {public static void main(String[] args) throws IOException {BufferedReader reader new BufferedReader(new InputStreamReader(System.in));StreamTokenizer tokenizer new StreamTokenizer(reader);PrintWriter writer new PrintWriter(System.out);// 读取整数的个数tokenizer.nextToken();int n (int) tokenizer.nval;int sum 0;// 循环读取 n 个整数并求和for (int i 0; i n; i) {tokenizer.nextToken();int num (int) tokenizer.nval;sum num;}// 输出结果writer.println(这些整数的和是: sum);// 刷新输出缓冲区writer.flush();// 关闭资源reader.close();writer.close();}
}
按行读取
在算法比赛中当需要按行读取输入并进行输出时BufferedReader 和 PrintWriter 是非常实用的工具。BufferedReader 能够高效地按行读取输入而 PrintWriter 可以高效地输出结果。以下是详细的使用说明和示例代码。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class ReadAndWriteByLine {public static void main(String[] args) throws IOException {// 创建 BufferedReader 对象用于从标准输入读取数据BufferedReader reader new BufferedReader(new InputStreamReader(System.in));// 创建 PrintWriter 对象用于将结果输出到标准输出PrintWriter writer new PrintWriter(System.out);// 读取第一行输入这一行通常包含一个整数表示后续输入的行数String firstLine reader.readLine();int numLines Integer.parseInt(firstLine);// 循环读取指定行数的输入for (int i 0; i numLines; i) {// 读取一行输入String line reader.readLine();// 这里可以对读取到的每一行数据进行处理// 例如将每行数据原样输出writer.println(line);}// 刷新 PrintWriter 的缓冲区确保所有数据都被输出writer.flush();// 关闭 BufferedReader 和 PrintWriter释放资源reader.close();writer.close();}
}