Notice
suyeonme
[Java] Array, ArrayList 본문
Array
특징
- 배열은 선언하는 동시에 배열의 크기를 지정한다. 그 이후에는 크기를 변경할 수 없다. (크기가 고정적이다)
- 선언시 별도의 초기화를 하지 않으면 기본값으로 0이 채워진다.
- 배열의 물리 주소와 논리 주소는 동일하다. 따라서 index를 통해서 요소에 접근할 수 있다.
- 메모리 공간이 연속적으로 구성된다.
- 배열은 참조 객체(reference object)이므로 배열을 가리키는 참조 변수는 스택(stack) 영역에 할당된다. 이 참조 변수가 가리키는 주소값은 실제 힙(heap) 영역에 생성되는 배열의 주소값이다.
- index를 사용하여 요소에 접근한다.
단점
- 배열의 크기가 고정적이기 때문에 확장성이 떨어진다. 따라서 데이터의 개수가 가변적이라면 배열의 사용을 지양해야한다.
- 배열 중간의 요소를 제거하는 경우, 해당 위치의 인덱스 뒤의 요소부터 맨끝의 요소까지 앞으로 한칸씩 위치를 이동해야한다. 따라서 시간복잡도는 O(n)이다.
- 배열 중간에 요소를 삽입하는 경우, 해당 위치의 인덱스 뒤의 요소부터 맨끝의 요소까지 앞으로 한칸씩 위치를 이동해야한다. 따라서 시간복잡도는 O(n)이다.
Array 선언
배열을 선언하는 두가지 방식이 있다.
1. 생성자를 통해서 생성
2. 선언과 동시에 초기화
// 생성자로 배열 생성
int[] intArr = new int[5];
intArr[1] = 110;
// 생성과 동시에 초기화
int[] numbers = new int[] { 1,2,3 };
int[] numbers = { 1,2,3 };
객체 배열은 아래와 같이 사용한다.
class Book() {...}
class BookList() {
Book[] library = new Book[1];
library[0] = new Book('Archemist');
}
다차원 Array
1 | 2 | 3 |
4 | 5 | 6 |
int[][] arr = new int[2][3] // row, column
int[][] arr = {{1,2,3}, {4,5,6}};
for(int i=0; i < arr.length; i++) {
for(int j=0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
ArrayList
특징
- 배열의 고정 크기라는 한계점을 극복하기 위한 자료구조로, 내부적으로는 배열을 이용하여 요소를 저장한다.
- 배열 리스트의 저장 공간의 크기는 가변적이다. 원소의 개수만큼 배열의 크기를 조정해주기 때문에 빈공간이 허용되지 않는다. 따라서 메모리 낭비가 없다.
- get(), set() 메서드를 통해서 요소에 접근한다.
단점
- 배열 리스트 중간에 요소를 삽입/제거할 경우, 시간 복잡도는 배열과 동일하다. -- O(n)
ArrayList 선언
import java.util.ArrayList;
// 타입 지정
ArrayList<Integer> intArrayList1 = new ArrayList<Integer>();
// 타입 생략
ArrayList<Integer> intArrayList2 = new ArrayList<>();
// 초기 크기 설정
ArrayList<Integer> intArrayList3 = new ArrayList<>(3);
//생성시 초기값 설정
ArrayList<Integer> intArrayList4 = new ArrayList<Integer>(Arrays.asList(1,2,3));
ArrayList의 Method
Method | Description |
get(index) | 배열 리스트의 요소를 가져온다. |
set(index, value) | 배열 리스트의 요소를 변경한다. |
add(index, value) | 배열 리스트에 요소를 추가한다. |
remove(index) | 배열 리스트에서 요소를 제거한다. |
clear() | 배열 리스트에서 모든 요소를 제거한다. |
size() | 배열 리스트의 사이즈를 가져온다. |
contains(value) | 배열 리스트에 특정 값이 있는지 확인한다. (값이 존재하면 true 반환) |
indexOf(value) | 배열 리스트에서 특정 요소의 인덱스를 반환한다. (값이 없으면 -1 반환) |
isEmpty() | 배 리스트가 비었다면 true를 반환한다. |
clone() | 얕은 비교를 수행하여 배열 리스트를 복사한다. |
get()과 set()은 인덱스 연산자를 활용한다. 따라서 특정 위치에 있는 요소에 접근하거나 수정할 경우 시간 복잡도가 O(1)이다.
ArrayList<Integer> intArrayList = new ArrayList<Integer>(Arrays.asList(1,2,3));
intArrayList.get(0)
intArrayList.set(0,10);
intArrayList.add(4);
intArrayList.remove(1);
intArrayList.clear();
intArrayList.size();
intArrayList.contains(1);
intArrayList.indexOf(1);
'프로그래밍👩🏻💻 > Java' 카테고리의 다른 글
[Java] Boxing, Unboxing이란? (0) | 2023.03.01 |
---|---|
[Java] Servlet이란? (1) | 2022.10.11 |
[Java] BufferedReader/BufferedWriter (0) | 2022.08.07 |
[Java] Scanner란? (0) | 2022.06.05 |
[Java ] Bean Class란? (0) | 2022.06.04 |
Comments