문제
내가 작성한 정답
class Solution {
public String solution(String my_string) {
StringBuilder answer = new StringBuilder();
for(char c : my_string.toCharArray()) {
if(Character.isLowerCase(c)) answer.append(Character.toUpperCase(c));
else answer.append(Character.toLowerCase(c));
}
return answer.toString();
}
}
StringBuilder와 StringBuffer
- 스레드 안전성 StringBuilder: 스레드가 안전하지 않다. 즉, 여러 스레드가 동시에 접근할 경우 데이터 일관성이 보장되지 않는다. 따라서 단일 스레드 환경에서 성능이 더 좋습니다. StringBuffer: 스레드가 안전하다. 내부적으로 메서드에 synchronized 키워드를 사용하여 여러 스레드가 동시에 접근할 때 데이터 일관성을 유지한다. 그러나 이로 인해 성능이 떨어질 수 있다.
- 성능 StringBuilder: 스레드 안전성을 제공하지 않기 때문에, 단일 스레드 환경에서 더 빠른 성능을 제공한다. StringBuffer: 스레드 안전성을 제공하지만, 그로 인해 성능이 떨어질 수 있다. 따라서 멀티스레드 환경에서 사용해야 한다.
- 사용 용도 StringBuilder: 주로 단일 스레드 환경에서 문자열을 자주 변경해야 할 때 사용한다. 예를 들어, 문자열을 반복적으로 추가하거나 수정하는 경우에 적합하다. StringBuffer: 멀티스레드 환경에서 문자열을 안전하게 수정해야 할 때 사용한다. 여러 스레드가 동시에 문자열을 수정해야 하는 경우에 적합하다.
다른 사람들이 작성한 정답
StreamAPI

import java.util.stream.Collectors;
class Solution {
public String solution(String myString) {
return myString.chars()
.mapToObj(operand -> String.valueOf((char) (Character.isLowerCase(operand) ? Character.toUpperCase(operand) : Character.toLowerCase(operand))))
.collect(Collectors.joining());
}
}
class Solution {
public String solution(String my_string) {
String answer = "";
for(int i=0; i<my_string.length(); i++){
char c = my_string.charAt(i);
if(Character.isUpperCase(c)){
answer += String.valueOf(c).toLowerCase();
}else{
answer += String.valueOf(c).toUpperCase();
}
}
return answer;
}
}
char charAt(int index) - 주어진 인덱스에 위치한 문자를 반환
map vs mapToObj
- map 기본 데이터 타입(예: int, long, double)의 스트림에서 사용. 이 메서드는 각 요소를 변환하여 같은 기본 데이터 타입의 스트림을 반환한다. 예를 들어, IntStream에서 map을 사용하면 여전히 IntStream을 반환한다.
- mapToObj 기본 데이터 타입의 스트림을 객체 타입의 스트림으로 변환할 때 사용. 이 메서드는 각 기본 데이터 타입의 요소를 객체로 변환하여 Stream<T>를 반환한다. 예를 들어, IntStream에서 mapToObj를 사용하면 Stream<String>과 같은 객체 타입의 스트림을 반환할 수 있다.
Share article