ACM中Java输入输出
最初寫算法時,是用Scanner的。因為當時接觸的測試數據基本都是以算法的復雜度為主,但是后面遇到大量的輸入數據時。發現Scanner遠遠不能滿足條件。下面列出幾種常用的輸入輸出方式。(輸出統一用printwriter,系統的system.out太慢,結尾要釋放緩存才能輸出,不然數據放在緩存中輸不出來)
1:Scanner 這個類最慢,但是最好用,因為這個類沒有緩存處理,所以io方面大量輸入讀取特別慢。
2:bufferedreader這個類最不方便,但是可以滿足大部分輸入速度的需求,輸入缺點就是只能按行讀取數據,必要時需要字符串分割,轉成int以及其他類型還需要轉換。
BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));這種輸入方式只能輸入字符串然后分割處理等等,效率比Scanner高很多
3:StreamTokenizer這個類最快,相對第二種也好用很多,他的底層是用字符分割用,但是這樣處理有很大局限性。輸入string類型除了純字母。否則混合輸入會出錯,特殊符號在字符串中輸入也不行。
這種輸入方式效率最高,巨大的輸入量也能快速處理。
下面附上同一個題*(百度之星2018資格賽1002三種輸入的時間差距)
Scanner超時
bufferedreader
Streamtokenizer最快
其中bufferedreader最難用,Scanner最好用,但是streamtokenizer最快,剛開始可能用的不習慣,但是習慣就好了,畢竟這個影響太大了,至于輸出。系統輸出太慢。大量數據還會超時。
總結
以上是生活随笔為你收集整理的ACM中Java输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 494Div3(A
- 下一篇: pat1033汽车加油问题(Java贪心