오늘도 코딩 테스트 연습!
Arrays.sort()는 오름차순으로 정령을 해준다.
Arrays.sort();
Colections.reverseOrder() 를 사용하면 내림차순으로 바꿔준다.
Arrays.sort(list, Collections.reverseOrder());
StringBuilder
자바에서 String 객체는 변경 불가능하다. 한 번 생성되면 내용을 바꿀 수 없단 뜻이다. 따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어간다.
100만 개의 문자열을 연결해야 하는 상황이 왔다고 가정하자. 그리고 100만 개의 문자열을 추가로 생성했다고 하자.
문자열끼리 연결하는 작업 시에는 내부적으로 여러 작업이 발생하고, 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다. 이걸 100만 번 수행해야 하니 메모리를 많이 잡아먹게 되는 건 어찌보면 그렇게 되겠구나 싶다.
이 경우 고려해볼 수 있는 것 중 하나가 이 포스팅의 주제인 StringBuilder다. Stirng은 변경 불가능한 문자열을 생성하지만 StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에, String을 합치는 작업 시 하나의 대안이 될 수 있다.
간단한 사용법은 아래와 같다.
public class Main
{
public static void main(String[] args)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
// String str = stringBuilder; // String에 StringBuilder를 그대로 넣을 순 없다. toString()을 붙여야 한다
String str = stringBuilder.toString();
// 두 println()은 같은 값을 출력한다
System.out.println(stringBuilder);
System.out.println(str);
}
}
제곱근
Math.sqrt() 제곱근 루트 구하는 메서드
public class MathSqrt {
public static void main(String[] args) throws IOException {
System.out.println("9의 제곱근 : " + Math.sqrt(9));
System.out.println("20의 제곱근 : " + Math.sqrt(20));
System.out.println("50의 제곱근 : " + Math.sqrt(50));
System.out.println("100의 제곱근 : " + Math.sqrt(100));
System.out.println("NaN의 제곱근 : " + Math.sqrt(Double.NaN));
System.out.println("-1의 제곱근 : " + Math.sqrt(-1));
}
}
Math.pow ^기호를 의미하는 함수로
ex --> Math.pow(2.4)-> 결과 :16
Math.pow(밑.지수)
stream 기본 사용법
자바8부터 Stream 을 사용 할 수 있습니다.
기존에 자바 컬렉션이나 배열의 원소를 가공할떄, for문, foreach 등으로 원소 하나씩 골라내여 가공을 하였다면,
Stream 을 이용하여 람다함수형식으로 간결하고 깔끔하게 요소들의 처리가 가능g.
스트림 사용법을 간단하게 알아보겠습니다.
배열의 원소를 가공하는데 있어
map, filter, sorted 등 이 있습니다.
map은 요소들을 특정조건에 해당하는 값으로 변환해 줍니다.
요소들을 대,소문자 변형 등 의 작업을 하고 싶을떄 사용 가능 합니다.
filter는 요소들을 조건에 따라 걸러내는 작업을 해줍니다.
길이의 제한, 특정문자포함 등 의 작업을 하고 싶을때 사용 가능합니다.
sorted는 요소들을 정렬해주는 작업을 해줍니다.
요소들의 가공이 끝났다면 리턴해줄 결과를 collect 를 통해 만들어줍니다.
ArrayList<string> list = new ArrayList<>(Arrays.asList("Apple","Banana","Melon","Grape","Strawberry")); System.out.println(list);
//[Apple, Banana, Melon, Grape, Strawberry]
소문자 대문자로 바꾸기
list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);
collect-리턴 결과
forEach-하나씩 가각 작업
System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.joining(" ")));
//APPLE BANANA MELON GRAPE STRAWBERRY
System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.toList()));
//[APPLE, BANANA, MELON, GRAPE, STRAWBERRY] System.out.println(list.stream().map(String::toUpperCase).collect(Collectors.toList()));
//[APPLE, BANANA, MELON, GRAPE, STRAWBERRY]
list.stream().map(String::toUpperCase).forEach(s -> System.out.println(s));
//APPLE
//BANANA
//MELON
//GRAPE
//STRAWBERRY
filter 는 요소를 특정 기준으로 걸러냄
list.stream().filter(t->t.length()>5)
길이 5이상
System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.joining(" "))); //Banana Strawberry System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.toList())); //[Banana, Strawberry]