ArrayList란?
ArrayList는 Object배열을 이용해서 데이터를 순차적으로 저장한다.
배열에 저장할 공간이 없다면 더 큰 새로운 배열을 선언하여 기존 배열의 내용을 복사하여 붙여놓은 다음 새로운 내용을 순서대로 저장한다.
List 인터페이스를 상속받아 사용함.
ArrayList는 객체가 추가되어 용량을 초과하면 자동으로 부족한 크기만큼 용량이 늘어남.
배열은 데이터를 추가, 삭제 시 반복문으로 인덱스를 한 칸씩 밀거나 당기는 식으로 공간을 조절하지만
ArrayList는 이 과정을 자동으로 처리해주어서 편리하게 사용이 가능함.
즉, 장점과 단점을 정리해 보자면
장점
- 데이터에 순서가 있음
- 데이터의 중복 저장 허용
- index를 통한 검색 빠름
단점
- 데이터 추가, 삭제가 느림
ArrayList 선언하기
ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<>(); // 타입 생략 가능
ArrayList 값 추가 및 변경
ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 1 삽입
list.add(2);
list.add(1, 3); // index 1에 3 추가
System.out.println(list);
// [1,3,2]
출력 결과 : [1, 3, 2] 가 나옵니다.
- add(value) : 리스트 마지막에 값을 추가시키는 기능
* 참고 : 데이터의 일반 index 삽입 O(1)
- add(index, value) : 메서드는 원하는 위치에 값을 넣고 싶을 경우 파라미터 2개를 넣어주면 됨.
index : 리스트의 자리수, value : 원하는 값
* 참고 : 데이터의 특정 index 삽입 O(n)
데이터의 특정 index 삽입이 O(n)의 시간 복잡도를 가지게 된 이유는
특정 index에 삽입되게 되면 뒤에 있는 요소들을 하나씩 뒤로 이동시켜 주는 작업이 추가되기 때문에 O(n)의 시간 복잡도를 가지게 됨.
ArrayList 값 삭제하기
list.remove(2); // 2번 인덱스 삭제 => remove(index)
list.clear(); // 리스트의 모든 값 삭제
list.remove(list.indexOf(2)); // 리스트에 2를 포함한 인덱스 리턴 후 삭제
- remove(index) : 원하는 위치의 데이터 삭제 가능
- clear() : 모든 데이터 삭제
* 참고 : 데이터의 특정 index 삭제 O(n)
삭제도 위 내용과 같이 중간에 삭제된 데이터의 자리를 매꾸기 위해 뒤에 있는 요소들의 자리를 한칸씩 앞으로 이동시켜주는 작업이 추가된다.
ArrayList 값 검색하기
int index = list.indexOf(1); // 원하는 값의 인덱스를 리턴, 없으면 -1 리턴
boolean b = list.contains(1); // 원하는 값의 존재 유무
while(list.indexOf(1) == -1) { // 리스트에 원하는 값 모두 삭제
list.remove(list.indexOf(1));
}
- indexOf(value) : 원하는 값의 인덱스를 리턴함
- contains(value) : 원하는 값의 존재 유무 (boolean 값으로 리턴)
지우고 싶은 값을 리스트에서 검색하여 지울 수 있음
ArrayList 값 추출, 출력 하기
System.out.println(list); // 리스트 전체 출력
System.out.println(list.get(1)); // 1번 인덱스 출력
for(int i : list) {
System.out.println(i);
}
Iterator iter = list.iterator(); // 반복자 사용
while(iter.hasNext()){
System.out.println(iter.next());
}
값의 전체를 출력하고 싶은 경우 리스트만 넣는다.
리스트만 넣을 경우 오버라이딩 된 toString() 메서드에 의해 리스트에 존재하는 모든 데이터들이 한 줄로 출력된다.
리스트에서 원하는 인덱스에 해당하는 값을 출력하고 싶다면,
get(index) 메서드를 사용해서 해당 인텍스의 값을 반환해 준다.
하나하나씩 전체를 뽑아 내고 싶을 경우 반복문을 사용하여 출력할 수 있다.
* 참고자료 : 자바의 정석
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] TreeMap 이란 (0) | 2023.01.29 |
---|---|
[JAVA] LinkedList (0) | 2023.01.05 |
[JAVA] 컬렉션 프레임워크(collection framework) (1) | 2023.01.04 |
[JAVA] BigInteger , BigDecimal 클래스 (1) | 2022.12.14 |
[JAVA] StringTokenizer 클래스 (0) | 2022.12.14 |