StringBuilder4 [JAVA] String.format 과정 신나는 함수 실행 문제를 풀던 중에 코드를 깔끔하게 하려다 메모리는 두 배, 시간은 세 배 걸리는 일이 있어서 원인을 찾아보았다. 두 코드의 다른 점은 한 줄이었다. 밑의 두 코드 출력결과는 동일하다. sb.append("w(").append(a).append(", ").append(b).append(", ").append(c).append(") = ").append(funcW(a,b,c)).append("\n"); sb.append(String.format("w(%d, %d, %d) = %d\n",a,b,c,funcW(a,b,c))); 그래서 도대체 String.format은 어떤 과정을 거치는지 확인해봤다. String.format()의 동작 과정 1. String.java 1) 새 Formatter.. 기록/JAVA 2022. 4. 8. [JAVA] StringBuilder의 append(), String의 + 연산자 속도차이 StringBuilder의 append()와 String의 +연산자의 속도차이 자바에서 String은 변경이 안되는 객체이기 때문에 +연산을 하면 내부적으로 새 메모리를 할당받아서 사용한다고 한다. 그래서 String의 변경이 많은 경우에는 StringBuilder를 사용한다. 그런데 이 둘의 속도차이는 대략 어느정도 나는지, 정확히 어떤 부분에서 차이가 발생하는지 궁금해서 테스트해봤다. 테스트코드 초반 tc가 결과값이 좀 튀어서 앞의 두번 정도 계산하지 않고 12번 돌렸다. 출력창의 (final O)표시는 무시해도 된다. 출력창 문자열 지우는걸 깜빡했다. final과 일반 string을 둘다 테스트해봤는데 내 컴퓨터에서는 유의미한 차이가 나지 않아서 코드를 지웠다. public static void m.. 기록/JAVA 2022. 3. 11. [JAVA] StringBuilder의 insert, append insert StringBuilder의 insert메서드는 다시 AbstractStringBuilder의 insert메서드를 실행한다. insert 메서드 내에서 직접 한 번, str.getChars() 메서드 안에서 한 번 호출되어 총 System.arraycopy() 메서드가 두 번 호출된다. //AbstractStringBuilder.java 클래스 public AbstractStringBuilder insert(int offset, String str) { if ((offset length())) throw new StringIndexOutOfBoundsException(offset); if (str == null) str = "null"; int len = str.. 기록/JAVA 2022. 3. 10. [BOJ] 17298 오큰수 - JAVA 1. 풀이 ① stack.peek()과 nums[i] 비교 stack.peek()이 더 작으면 pop시켜서 없애버린다. 자신보다 큰 수 중 가장 오른쪽에 있는 수를 찾기 때문에 마지막 ④를 수행하면 그 뒤의 비교와 영향 없음 ② ①이 끝난 뒤 stack이 비어있다면 nums[i]보다 큰 수가 없는 것이므로 result[i]에 -1을 저장하고 다음 숫자를 비교한다. ③ stack이 비어있지않고 stack.peek()이 nums[i]보다 크다면 저장한다. ④ stack에 현재 nums[i]를 push하고 다음 숫자를 비교한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja.. 코딩테스트/BOJ 2022. 2. 5. 이전 1 다음