[Java] 출력 방식별 속도 정리
01 Aug 2024 - juno
#algorithm
#java
#BufferedWriter
#PrintWriter
#StringBuilder
백준 정렬 알고리즘 문제를 풀다가 시간초과가 나와 찾게된 출력방식별 속도 정리
목차
순위
방법은 총 N개의 줄에 1부터 10,000,000까지의 자연수를 한줄에 하나씩 출력하는 시간을 측정. 10번 측정해서 평균 값으로 순위를 매겼다고 한다.
순위 | 내용 | 평균(초) |
---|---|---|
1 | BufferedWriter, bf.write(i + “\n”); | 0.9581 |
2 | StringBuilder를 이용해 문자열 하나로 만든 다음, System.out.println(sb); | 1.1881 |
3 | BufferedWriter, bf.write(Integer.toString(i)); bf.newLine(); | 1.2556 |
4 | PrintWriter | 1.954 |
5 | System.out.println(i); | 30.013 |
비교해보기
실제로 그런가 궁금해서 1위와 5위를 비교해보겠다.
BufferedWriter
- 코드
public static void main(String[] args) throws IOException { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); List<Double> elapseTimes = new ArrayList<>(); double totalTime = 0; for (int c = 0; c < 10; c++) { long startTime = System.currentTimeMillis(); for (int i = 1; i <= 10000000; i++) { bw.write(i + "\n"); } bw.flush(); long endTime = System.currentTimeMillis(); elapseTimes.add((double) (endTime - startTime) / 1000); } for (int i = 1; i <= 10; i++) { double elapseTime = elapseTimes.get(i - 1); System.out.println(i + "번째에 걸린시간:" + elapseTime); totalTime += elapseTime; } System.out.println("10회 평균시간:" + (totalTime / 10)); bw.close(); }
- 결과
- 평균 1.3879(초)가 나왔다
1번째에 걸린시간:1.349 2번째에 걸린시간:1.44 3번째에 걸린시간:1.363 4번째에 걸린시간:1.403 5번째에 걸린시간:1.385 6번째에 걸린시간:1.393 7번째에 걸린시간:1.385 8번째에 걸린시간:1.359 9번째에 걸린시간:1.386 10번째에 걸린시간:1.416 10회 평균시간:1.3879
- 평균 1.3879(초)가 나왔다
System.out.print
- 코드
public static void main(String[] args) { List<Double> elapseTimes = new ArrayList<>(); double totalTime = 0; for (int i = 0; i < 10; i++) { long startTime = System.currentTimeMillis(); for (int j = 1; j <= 10000000; j++) { System.out.println(j); } long endTime = System.currentTimeMillis(); elapseTimes.add((double) (endTime - startTime) / 1000); } for (int i = 1; i <= 10; i++) { double elapseTime = elapseTimes.get(i - 1); System.out.println(i + "번째에 걸린시간:" + elapseTime); totalTime += elapseTime; } System.out.println("10회 평균시간:" + (totalTime / 10)); }
- 결과
- 평균 7.9952(초)가 나왔다.
1번째에 걸린시간:8.138 2번째에 걸린시간:7.785 3번째에 걸린시간:7.855 4번째에 걸린시간:7.889 5번째에 걸린시간:7.828 6번째에 걸린시간:7.961 7번째에 걸린시간:8.136 8번째에 걸린시간:8.103 9번째에 걸린시간:8.139 10번째에 걸린시간:8.118 10회 평균시간:7.9952
- 평균 7.9952(초)가 나왔다.
비교결과
BufferedWriter
는 평균 1.3879(초)System.out.print
는 평균 7.9952(초)로 참고한 출처의 자료와는 좀 달랐지만 유의미한 차이가 났다.- 아마 참고한 자료는 java 1.8 버전이고 나는 java17 버전을 사용했기 때문이 아닐까 싶다.
- 정확한 차이를 알고싶다면 다른 방식들도 실제로 비교를 해봐야 할 것 같다.