[자바/JAVA] 일반 배열보다 편리한 ArrayList
- Java
- 2021. 5. 20.
Collection Framework를 구성하는 인터페이스 중 자주 활용되는 ArrayList에 대해 정리한다.
배열과 비슷한 기능 수행
ArrayList는 이름에서도 알 수 있듯 배열(Array)의 기능을 수행한다. 그러면서도 일반적인 배열[]을 사용했을 때 동반되는 불편함인 배열의 크기 문제를 제거한다.
예를 들어
public static void main(String[] args) {
int[] arr = new int[2];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
for(int i = 0; i < arr.size(); i ++) {
System.out.println(i);
}
배열의 크기가 2인 arr에 3번째 인덱스 값을 넣으면 ArrayIndexOutOfBoundsException라는 runtime에러가 발생한다.
반면 같은 내용을 ArrayList로 구현하면 에러가 발생하지 않는다. 배열의 크기를 자동으로 늘려주기 때문이다.
public static void main(String[] args) {
ArrayList arr = new ArrayList(); // 배열의 크기를 지정해 주지 않아도 됨
arr.add(0);
arr.add(1);
arr.add(2);
arr.add(3);
for(int i = 0; i < arr.size(); i ++) {
System.out.println(i);
}
ArrayList에서 값을 추가할 땐 add()
를사용한다.
형변환 필요
그러나 ArrayList는 이론적으로는 형변환을 해줘야하는 단점이 존재한다.
for(int i = 0; i < arr.size(); i ++) {
int value = arr.get(i); // error 발생
System.out.println(i);
}
get()
은 배열에 있는 값을 가져오는 메서드다. 이처럼 int 형 변수 value에 배열 값을 가져오면 에러가 발생한다. arr.get(i)
가 int형 타입이 아니기 때문이다. 애당초 배열 선언부터 데이터 타입을 결정하지 않아도 되는 ArrayList는 모든 데이터 타입의 조상인 Object형 타입을 인자로 받고 있다.
때문에
int value = (int) arr.get(i);
처럼 명시를 통해 형변환을 해야한다.
Generic과 함께 사용
수동으로 형변환을 하는 수고로움을 덜기 위해 실제로는 Generic과 함께 사용된다. <>안에 데이터 타입을 명시한다.
class ArrayListEx1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0)); // A
System.out.println(list.get(1)); // B
}
}
ArrayList에 사용되는 함수를 좀더 보자면
list.set(0, "AA"); // 0번 인덱스의 값을 "AA"로 교체
System.out.println(list.get(0)); // AA
set()
은 특정 인덱스의 값을 바꾼다.
list.remove(0);
System.out.println(list.get(0)); // B
remove()
는 특정 인덱스의 값을 삭제한다. 0번째 인덱스에 있던 AA를 삭제하고 0번째 인덱스를 출력한 결과가 B인 걸 보면 알 수 있듯 인덱스가 삭제되면 자동으로 데이터가 앞으로 당겨진다.
'Java' 카테고리의 다른 글
[자바/JAVA] 변수(Variable)란 무엇인가, 용어를 중심으로 (0) | 2021.05.25 |
---|---|
[자바/JAVA] 키-값으로 저장되는 HashMap (0) | 2021.05.22 |
[자바/JAVA] Properties로 XML 파일에 값 넣기 (0) | 2021.05.18 |
[자바/JAVA] 짧게 후려치는 Generic의 개념과 문법 (0) | 2021.05.16 |
[자바/JAVA] substring() 메서드로 파일과 확장자명 구분 짓기 (0) | 2021.05.16 |