[Java] ArrayList란?

Hoehenflug·2021년 12월 4일
0

Collections Framework

목록 보기
2/2

Collections Framework의 ArrayList에 대해 알아보자

1. ArrayList

  • Collections Framework에서 가장 많이 사용
  • List 인터페이스를 구현하기 때문에 데이터의 저장 순서 유지, 데이터 중복 허용
  • 기존의 Vector를 개선한 것으로 구현원리와 기능적인 측면에서 동일
  • Object 배열을 이용해 데이터를 순차적으로 저장
  • 배열에 더 이상 저장할 공간이 없으면 더 큰 배열을 새로 생성해 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장

2. 코드로 알아보는 ArrayList

import java.util.*;

public class arrayList {
	public static void main(String[] args) {
		ArrayList list1 = new ArrayList(10);
		list1.add(new Integer(5));
		list1.add(new Integer(4));
		list1.add(new Integer(2));
		list1.add(new Integer(0));
		list1.add(new Integer(1));
		list1.add(new Integer(3));
		
		ArrayList list2 = new ArrayList(list1.subList(1, 4)); // list1의 index 1부터 3까지(4는 포함 안됨) 추출해 list2 선언
		
		Collections.sort(list1); // list1 정렬
		Collections.sort(list2);
		System.out.println(list1.containsAll(list2)); //true
		
		list2.add("B");
		list2.add("C");
		list2.add(3, "A"); // 3번째 index에 저장
		list2.set(3, "AA"); // 3번째 index 수정
		
		list1.retainAll(list2); // list1에서 list2과 공통된 것만 남기고 나머지는 삭제
		
        // list2에서 list1에 포함된 객체들 삭제
		for(int i = list2.size() - 1; i >= 0; i--) {
			if(list1.contains(list2.get(i))) {
				list2.remove(i);
			}
		}
	}
}
  • list2에서 list1과 공통되는 요소들을 찾아 삭제하는 부분
    - list2의 각 요소에 접근하기 위한 for문 사용 시 변수 i를 0부터 증가시키는 것이 아니라 'list2.size() - 1'부터 감소시키면서 거꾸로 반복
    • 변수 i를 증가시키면서 삭제하면, 한 요소가 삭제될 때마다 빈 공간을 채우기 위해 자리이동을 해 올바른 결과 얻을 수 없음
    • 변수를 감소시키며 삭제해야 자리이동에 영향 받지 않고 원하는 결과를 얻을 수 있음

3. ArrayList의 장점과 단점

  • 장점 : ArrayList와 Vector 같이 배열을 이용한 자료구조는 데이터를 읽어오고 저장할 때는 효율적
  • 단점 : 용량을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새로 생성된 배열로 데이터를 복사해야 해 비효율적

    ArrayList의 인스턴스를 처음 생성할 때, 저장할 데이터의 개수를 고려해 충분한 용량의 인스턴스를 생성하는 것이 좋음

0개의 댓글