개발/Java

☕️Java:: ArrayList & removeIf & switch case

hyuunii 2023. 11. 24. 08:55

Array vs ArrayList

Array 동일한 데이터 유형의 고정된 수의 요소를 보유하는 컨테이너 객체. 배열의 길이는 배열 객체를 선언하는 동안 정의되며 이후 변경 불가.

ArrayList 크기가 고정되어 있지 않음(그래서 총 몇개의 원소를 받아야할지 모르는 알고리즘 풀 때 매우 유용..!) 새 요소를 추가해야 할 때마다 (선언한 ArrayList 이름).add((추가하고 싶은 요소))를 실행하여 간단히 추가할 수 있음.

 

ArrayList 사용 예시) 백준 2501번 약수 구하기; Java 11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.*;
import java.util.*;
 
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
 
        List<Integer> divisor = new ArrayList<>();  //Integer를 받는 ArrayList 선언
        for (int i = 1; i <= N; i++if (N % i == 0) divisor.add(i);  //(선언한 ArrayList 이름).add(추가할 요소) 이렇게 간단히 새로운 요소 추가 가능
 
        if (divisor.size() >= K) System.out.println(divisor.get(K-1));
        else System.out.println(0);
    }
}
cs

 

 

 

 

ArrayList에서 removeIf 사용하기

ArrayList의 removeIf() 메소드는 인자로 전달된 조건에 따라 리스트의 아이템들을 삭제함.

조건에 부합하는 것은 삭제, 그렇지 않은 것은 남김.

1
2
3
4
5
6
7
8
9
10
List<Integer> numbers = new ArrayList<>(Arrays.asList(123456789));
System.out.println("numbers: " + numbers.toString());
 
numbers.removeIf(n -> (n % 3 == 0));
System.out.println("numbers(after remove): " + numbers.toString());
 
 
//결과
numbers: [123456789]
numbers(after remove): [124578]
cs

 

 

 

 

 

 

switch/case 구문

if 문과 비슷하지만 좀 더 일정한 형식이 있는 조건·판단문

 

입력 변수의 값과 일치하는 case 입력값(입력값1, 입력값2, …)이 있다면 해당 case 문에 속한 문장들이 실행된다.

case 문마다 break문이 있는데 해당 case 문을 실행한 뒤 switch 문을 빠져나가기 위한 것이다.

만약 break 문이 빠져 있다면 그 다음의 case 문에 속한 문장들이 실행된다.

 

 

형식 

1
2
3
4
5
6
7
8
9
10
switch(입력변수) {
    case 입력값1: ...
         break;
    case 입력값2: ...
         break;
    ...
    default: ...
         break;
}
 
cs

 

 

예시

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
32
33
34
35
36
public class Sample {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";

        switch (month) {  // 입력 변수의 자료형은 byte, short, char, int, enum, String만 가능하다.
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}
 
cs

결과? August

switch 문의 입력이 1이면 January라는 문자열이, ... 12면 December라는 문자열이 출력되는 예제이다.

이 예제는 month가 8로 고정되어 있기 때문에 August가 출력될 것이다.

 

switch 문은 month의 값이 1이면 case 1: 문장이 실행되고 2이면 case 2: 문장이, 3이면 case 3: … 이런 식으로 수행된다.

만약 month에 1에서 12 사이의 숫자가 아닌 다른 값이 저장되어 있다면 default: 문장이 수행된다.

 

이와 같이 입력값이 정형화되어 있는 경우 if 문보다는 switch/case 문을 쓰는 것이 코드의 가독성이 좋다.

 

switch/case 문은 if 문으로 변경이 가능하지만 if 문으로 작성된 모든 코드를 switch 문으로 변경할 수는 없다.