☕️Java:: ArrayList & removeIf & switch case
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(1, 2, 3, 4, 5, 6, 7, 8, 9));
System.out.println("numbers: " + numbers.toString());
numbers.removeIf(n -> (n % 3 == 0));
System.out.println("numbers(after remove): " + numbers.toString());
//결과
numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers(after remove): [1, 2, 4, 5, 7, 8]
|
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 문으로 변경할 수는 없다.