1. 程式人生 > >Java從控制檯讀取資料,輸入流System.in的幾種方法效率比較

Java從控制檯讀取資料,輸入流System.in的幾種方法效率比較

這是一道PTA上關於複雜度演算法的題目——最大子列和問題,程式簡單。

我分別用

1)構造Scanner物件:Scanner in = new Scanner(System.in);

2)構造BufferedReader物件:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

3)直接使用System.in.read()讀取從控制檯輸入的位元組三種方法,來測試程式執行效率。

例如,其中的一個程式程式碼如下(其餘兩個只是讀入資料的方式有差異):

import java.io.*;

public class Main {
	public static void main(String...strings) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		br.readLine();
		String s = br.readLine().trim();
		String[] nums = s.split(" ");
		
		int thisSum = 0;
		int maxSum = 0;
		for(int i = 0; i < nums.length; i++) {
			thisSum += Integer.parseInt(nums[i]);
			if(thisSum > maxSum)
				maxSum = thisSum;
			else if(thisSum < 0)
				thisSum = 0;
		}
		System.out.println(maxSum);
	}
}
而,1)、2)、3)的執行結果分別如下:

可以發現,使用Scanner類的物件在讀取輸入資料方面雖然很方便,但是執行效率低,資料量越大,差異越明顯,並且佔用記憶體空間也大。

而BufferedReader和System.in則無明顯區別,但是BufferedReader在讀入資料方面上的處理會稍微簡便些。

相關推薦

Java控制檯讀取資料輸入System.in方法效率比較

這是一道PTA上關於複雜度演算法的題目——最大子列和問題,程式簡單。 我分別用 1)構造Scanner物件:Scanner in = new Scanner(System.in); 2)構造BufferedReader物件:BufferedReader br = new B

第一篇 部落格:java資料庫讀取資料並寫入到excel表格中

  今天,組長分配了查詢資料庫記錄,並把這些記錄寫入到excel表格中,以前沒有嘗試過,借鑑了一些別人的程式碼,最終實現了功能,寫一篇部落格,總結一下這個過程。1.準備需要用到的jar包    1.jxl.jar     2.mysql-connector-java-5.1.

Java呼叫R 資料庫讀取資料用R根據讀取資料生成圖片儲存

Java呼叫R 以及用R生成的圖片儲存 使用 png()可以保證圖片質量 有人說繪製的圖片上有中文會出現亂碼,其實設定下字型就好了 family=‘STXihei’ Java呼叫R 以及用R生成的圖片儲存 Rserve的配置和啟動: ①安裝Rserve包。

java資料庫讀取選單遞迴生成選單樹

首先看一下選單的樣子 根據這個樣子我們定義選單類 public class Menu { // 選單id private String id; // 選單名稱 private String name; // 父

JAVA控制檯資料方法

1. 使用標準輸入流:system.in (JDK 1.4 及以下版本唯一的讀取方法) System.in.read()一次只讀入一個位元組資料,返回一個整數,且必須初始化 其他型別資料需要手工轉換 讀取過程必須捕獲IOException //int read =

Java鍵盤讀取資料的三方式

1.讀取單個字元: 從輸入流中讀取資料的下一個位元組,返回0~255範圍內的int型位元組值,如果達到輸入流的末尾,則返回-1。所以讀取char型別時需要將int型別轉換成char型別 Syst

[Java] 控制檯讀取字元和字串

import java.util.Scanner; Scanner input = new Scanner(System.in); 讀取字串 String str = input.next(); 讀取字元 String s = input.nextLine(

springMVC+webUploader後臺讀取資料回顯圖片,超過三張不再新增

<script type="text/javascript">$(function(){var data = ${photoList};if(data){for(var i in data){$('#fileList').append('<li id="K

FlumeKafka讀取資料並寫入到Hdfs上

需求:kafka有五個主題  topic topic-app-startuptopic topic-app-errortopic topic-app-eventtopic topic-app-usagetopic topic-app-pageflume讀取Kafka 5個主題

java後臺list集合傳值到前臺再取值的方法

1.在jsp頁面中巢狀 java程式碼: 首先jsp頁面中匯入java的工具類 <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEnco

資料庫中匯出資料成Dataframe格式兩方法效率比較

方法1: import pymysql import pandas as pd import time import xlrd first = time.time() #在資料庫中操作150s,在python中操作320s #方法1 con = pymysql.connect(host="

java讀取寫入檔案方式效率比較

public class ReadTxtJson {public static String readTxtFile(String FileName) throws Exception {BufferedInputStream bufferedInputStream = n

java算法面試題:排序都有哪方法?請列舉。用JAVA實現一個快速排序。選擇冒泡快速集合至少4方法排序

算法 err div println rda print 算法面試 ++ 快速排序 package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util

【JS】深拷貝與淺拷貝的區別實現深拷貝的方法

如何區分深拷貝與淺拷貝,簡單點來說,就是假設B複製了A,當修改A時,看B是否會發生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,如果B沒變,那就是深拷貝,自食其力。 此篇文章中也會簡單闡述到棧堆,基本資料型別與引用資料型別,因為這些概念能更好的讓你理解深拷貝與淺拷貝。 我們來舉個淺拷貝例

C/C++ 中 int 轉 stringstring 轉 int 的方法

C int 轉 string sprintf int a = 1; char strDst[256] = {0}; sprintf_s(strDst,256,"%d",a); itoa int

Android開發獲取GPS位置包含apn\wifi\gps 方法

1.gps定位: 優點:最簡單的手機定位方式當然是通過GPS模組(現在大部分的智慧機應該都有了)。GPS方式準確度是最高的 缺點1.比較耗電;        2.絕大部分使用者預設不開啟GPS模組;        3.從GPS模組啟動到獲取第一次定位資料,可能需要比較長的時間;        4.室內幾乎

Android開發獲取GPS位置包含基站\wifi\gps 方法

1.gps定位: 優點:最簡單的手機定位方式當然是通過GPS模組(現在大部分的智慧機應該都有了)。GPS方式準確度是最高的 缺點1.比較耗電;        2.絕大部分使用者預設不開啟GPS模組;        3.從GPS模組啟動到獲取第一次定位資料,可能需要比較長的時間;       

html輸入空行的方法

html空行有兩種方法可以見到實現,無需使用CSS樣式即可實現段落空行,上下文段間隔空間。 一、使用p段落標籤空行   -   TOP p語法 <p>第一段</p> p是段落標籤,文章段落前使用<p>結束使用</p>,

讀取Spring的配置檔案applicationContext.xml方法

1).利用ClassPathXmlApplicationContext,這種方式配置檔案應該放在類路徑下,否則Spring將找不到該檔案。 Java程式碼: ApplicationContext ctx=new ClassPathXmlApplicationContext("

實現瀑布佈局的方法

本文分別用原生JS與JQ框架寫出瀑布流佈局的方法 首先引庫: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>我的瀑