ArrayList는 배열을 이용해 List를 구현한 것으로 내부적으로 배열을 이용했기에 배열의 장점인 인덱스를 이용해 데이터에 접근하는 속도가 빠르지만, 데이터의 추가/삭제는 느린 특징을 가진다.
배열(Array)과의 차이
인덱스로 내부 요소를 관리한다는 점에서 유사하지만, 배열을 한 번 생성되면 크기가 변하지 않는다. 반면 ArrayList는 데이터가 추가되어 저장 용량을 초과하면 자동으로 저장 용량을 늘린다.
먼저 Java에서 ArrayList를 사용하려면 관련 클래스를 import해줘야 한다.
import java.util.ArrayList;
ArrayList 생성은 다음과 같다.
ArrayList list = new ArrayList(); // 타입 미설정 Object로 선언
ArrayList<Student> members = new ArrayList<Student>(); // Student 객체만 사용
ArrayList<Integer> num = new ArrayList<Integer>(); // int형만 사용
ArrayList<Integer> num = new ArrayList<>(); // 타입 파라미터 생략
ArrayList<Integer> num = new ArrayList<Integer>(10); // 초기 용량 지정
ArrayList<Integer> num = new ArrayList<Integer>(Arrays.asList(1, 2, 3)); // 선언시 값 추가
ArrayList list = new ArrayList()로 선언을 하는 경우도 있는데 잘못된 타입으로 캐스팅했을 경우 에러가 발생하기 때문에 되도록 ArrayList에 타입을 명시해서 선언해주는 것이 좋다.
ArrayList<String> colors = new ArrayList<>();
// add() method
colors.add("Black");
colors.add("White");
colors.add(0, "Green"); // 인덱스 지정해 값 추가
colors.add("Red");
// [Green, Black, White, Red]
// set() method
colors.set(0, "Blue"); // 0번째 인덱스 값 Blue로 변경
// [Blue, Black, White, Red]
ArrayList에 값을 추가할 때는 add(index, value) 메소드를 사용하면 되고, 인덱스를 지정하지 않을 경우 리스트 제일 뒤에 값이 추가되고, 인덱스를 지정하면 해당 인덱스부터 마지막 인덱스까지 인덱스 값이 1씩 밀려나게 된다.
값을 변경할 때는 set(index, value) 메소드를 사용해 해당 인덱스 데이터를 입력받은 value값으로 변경한다.
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
list.remove(1); //index 1 제거
list.clear(); //모든 값 제거
ArrayList의 특정 값을 삭제할 때는 remove(index, value) 메소드를 사용한다. 이 경우에 삭제된 인덱스 뒤의 인덱스부터 마지막 인덱스의 인덱스 값이 -1씩 당겨지게 된다. 그리고 특정 값이 아니라 ArrayList의 데이터 전체를 삭제하려면 clear()를 호출하면 된다.
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true
System.out.println(list.indexOf(1)); //1이 있는 index반환 없으면 -1
contains(value) 메소드는 값의 유무를 판단해주는 것으로 값이 있다면 true, 없다면 false가 return된다. indexOf(value) 메소드는 value의 인덱스 값을 return하고 값이 없다면 -1을 return한다.
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.get(0)); //0번째 index 출력
for(Integer i : list) { //for문을 통한 전체출력
System.out.println(i);
}
Iterator iter = list.iterator(); //Iterator 선언
while(iter.hasNext()){ //다음값이 있는지 체크
System.out.println(iter.next()); //값 출력
}
ArrayList의 get(index) 메소드를 사용하면 ArrayList의 원하는 index의 값이 return되며, ArrayList의 모든 값을 출력하기 위해서는 대부분 for문을 사용하거나 Iterator를 사용해서 출력을 한다.
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.size());
//list 크기 : 3