일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Redis
- dataframe
- JPA
- pandas
- docker
- 알고리즘
- series
- equals
- 이펙티브 자바
- 다익스트라
- DP
- dfs
- springboot
- java
- 파이썬
- BFS
- spring security
- 비트마스크
- 데이터 flow
- 세그먼트 트리
- 스프링
- 위상정렬
- disjoint set
- UML
- 포트앤어댑터 아키텍처
- 헥사고날 아키텍처
- 백준
- 자바
- 문자열
- ddd
- Today
- Total
코딩못하는사람
StringBuilder를 쓰는 이유 본문
StringBuilder란.
API를 살펴보면 첫줄에 A mutable sequence of characters 라고 써있다.
String은 immutable 한 객체로 값을 수정하면 새로운 객체를 만들어 내서 메모리를 잡아먹고 시간도 잡아먹게된다.
하지만 StringBuilder를 사용하게 되면 mutable한 sequence를 수정하는 것이므로 같은 주소에 값만 수정되는 개념이 되게되서 훨씬 빠르게 작동하게 되는 것이다. (메모장에 써 넣어 놓는다고 생각이 든다)
예를 들어 for문 10000번을 돌면서 10000줄의 문자열을 출력해야한다고 하면
System.out.println("정답")은 만번의 String을 선언하고 메모리를 잡아먹게 되지만
매번 StringBuilder에 sb.append("정답\n") 을 해주면 하나의 주소의 sb에 값만 수정하므로 훨씬 빠르다.
문제를 풀어보면서 그냥 한줄씩 println으로 출력하기, BufferedWriter에 저장해서 출력하기,StringBuilder를 사용해서 속도를 비교해봤다. (답이 여러줄이라는 가정)
System.out.println("출력값") * n번
>가장 느림
BufferedWriter.write("출력값") * n번
BufferedWirter.flush()
>빠름
StringBuilder.append("출력값") * n번
System.out.println(StringBuilder.toString())
>조금 더 빠름
출력값이 많게되면 빠르고 편리한게 StringBuilder를 사용해서 하는게 좋을 것 같다.
bw.write 메소드에 stringbuilder를 넣었을 때 에러가 나서 api를 살펴보니 Stringbuilder가 시퀀스형이라서 인자로 받지 못하는 것 이였다. 넣을려면 stringbuilder.toString()을 해줘야 한다.
java.lang패키지라 따로 선언이 필요없다.
'자바 메모장 > 개념 및 문법' 카테고리의 다른 글
Immutable,mutable 객체 (0) | 2021.02.10 |
---|---|
JVM 메모리 구조 정리 (2) | 2021.02.09 |
배열 정렬 Array.sort() (0) | 2021.02.08 |
printf,println의 차이와 소수점 자리 출력(백준 4344) (0) | 2021.02.06 |
문자열 String (0) | 2021.01.28 |