728x90
반응형
2차원 배열 동적 할당하는 방법
- n은 row의 크기, m은 col의 크기라고 하자.
- n은 알지만 m의 크기는 정해지지 않았을 때, 2차원 배열에 값을 할당하는 과정에서 문제가 생겼다.
- m의 크기가 정해져 있을 때는
- 1. int[][] graph = new int[n][]; (처음 접근한 방법)
- m의 크기가 정해져 있지 않은 상황에서는 사용할 수 없었다.
- 장점
- access 속도가 빠르고, 메모리 효율이 좋다.
- 기본형 배열이므로 타입 안정적이다.
- 단점
- 동적으로 크기를 조정할 수 없다.
- m을 미리 초기화해야 한다.
int[][] graph = new int[n][];
for (int i = 0; i < n; i++) {
graph[i] = new int[m];
}
- 2. List<List<Integer>> graph = new ArrayList<>();
- 리스트의 타입으로 Integer 리스트를 넣는 경우
- 장점
- m의 크기를 동적으로 설정가능하고, m을 미리 초기화하지 않아도 된다.
- 제네릭 타입을 사용하므로 타입 안정적이다.
- 단점
- 대용량 데이터의 경우 배열에 비해 메모리 및 속도에서 불리하다.
- 리스트의 내부 구현 때문에 추가적인 메모리 오버헤드가 발생할 수 있다.
int[][] graph = new int[n][];
for (int i = 0; i < n; i++) {
graph[i] = new int[m];
}
- 3. ArrayList<Integer>[] graph = new ArrayList[n];
- ArrayList <Integer>을 타입으로 하는 1차원 배열
- 장점
- m의 크기를 동적으로 설정가능하다.
- 단점
- 모든 행을 초기화해야 한다.
- 경우에 따라 타입 캐스팅이 필요할 수 있다.
ArrayList<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) {
graph[i] = new ArrayList<>();
}
728x90
느낀 점
- 2차원 배열의 m의 크기를 동적으로 설정할 수 없다는 것, C와 Python은 되기에..
- ArrayList<Integer>[] 이렇게 선언할 때는, List<Integer>[] 는 쓸 수 없다.
다음에 학습할 것
- int와 int[]의 차이
반응형
코테에 자주 사용될 것으로 예상되므로 각 방법의 장단점을 알고 있자.
728x90
반응형
'Club > 99클럽 코테 스터디 2기' 카테고리의 다른 글
99클럽 코테 스터디 27일차 TIL printf (1) | 2024.06.15 |
---|---|
99클럽 코테 스터디 26일차 TIL Arrays method (0) | 2024.06.14 |
99클럽 코테 스터디 24일차 TIL DP 예제 (0) | 2024.06.12 |
99클럽 코테 스터디 23일차 TIL DP (0) | 2024.06.11 |
99클럽 코테 스터디 22일차 TIL JAVA 데이터 타입 (0) | 2024.06.10 |
댓글