Java Collection Framework - ArrayList

 

본 내용은 자바의 정석 3rd Edition을 참고하여 작성되었습니다. 개인적으로 학습한 내용을 복습하기 목적이기 때문에 내용상 오류가 있을 수 있습니다.

1. ArrayList란?

ArrayList는 컬렉션 프레임워크에서 가장 많이 사용되는 컬렉션 클래스이다. List인터페이스를 구현하기 때문에 데이터의 저장순서는 유지되고, 중복을 허용 한다. Object배열을 이용하여 데이터를 순차적으로 저장 한다.

예를 들면, 첫 번째로 저장한 객체는 Object배열의 0번째에 저장되고 그 다음에 저장하는 객체는 1번째에 저장된다. 이런 식으로 계속 배열에 순서대로 저장되며, 배열에 더이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성하여 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장된다.

2. ArrayList 예제

2.1 ArrayList 예제 1

public class ArrayListEx1 {
    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(3));
        list1.add(new Integer(2));
        list1.add(new Integer(0));
        list1.add(new Integer(1));
        list1.add(new Integer(3));

        // list2 에 list1에 저장된 객체 중에서 1번째부터 4번째까지 저장
        ArrayList list2 = new ArrayList(list1.subList(1, 4));
        print(list1, list2);

        // list1, list2 정렬
        Collections.sort(list1);
        Collections.sort(list2);
        print(list1, list2);

        // list1이 list2의 모든요소를 포함하고 있는지 확인
        System.out.println("list1.containsAll(list2) : " + list1.containsAll(list2));

        // 새로운 객체를 추가
        list2.add("B");
        list2.add("C");
        list2.add(3, "A");  // 3번째에 새로운 객체 추가하고, 3번째부터 저장된 객체들은 4번째 요소부터 저장됨
        print(list1, list2);

        // 3번째 요소에 새로운 객체로 교체
        list2.set(3, "AA");
        print(list1, list2);

        // list1, list2에 저장된 객체중에서 주어진 컬렉션과 공통된 것만 남기고 나머지는 삭제
        System.out.println("list1.retainAll(list2) : " + list1.retainAll(list2));
        print(list1, list2);


        for (int i = list2.size() - 1; i >= 0; i--) {
            if (list1.contains(list2.get(i)))
                list2.remove(i);
        }
        print(list1, list2);
    }

    static void print(ArrayList list1, ArrayList list2) {
        System.out.println("list1 : " + list1);
        System.out.println("list2 : " + list2);
        System.out.println();
    }
}
list1 : [5, 4, 3, 2, 0, 1, 3]
list2 : [4, 3, 2]

list1 : [0, 1, 2, 3, 3, 4, 5]
list2 : [2, 3, 4]

list1.containsAll(list2) : true
list1 : [0, 1, 2, 3, 3, 4, 5]
list2 : [2, 3, 4, A, B, C]

list1 : [0, 1, 2, 3, 3, 4, 5]
list2 : [2, 3, 4, AA, B, C]

list1.retainAll(list2) : true
list1 : [2, 3, 3, 4]
list2 : [2, 3, 4, AA, B, C]

list1 : [2, 3, 3, 4]
list2 : [AA, B, C]

2.2 ArrayList 예제 2

public class ArrayListEx2 {
  public static void main(String[] args) {
    final int LIMIT = 10;
    String source = "0123456789abcdefghiABCDEFGHIJ!@#$%^&*()ZZZ";
    int length = source.length();

    List list = new ArrayList(length/LIMIT + 10);

    for (int i = 0; i < length; i+=LIMIT) {
      if (i + LIMIT < length)
        list.add(source.substring(i, i+LIMIT));
      else
        list.add(source.substring(i));
    }

    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
  }
}
0123456789
abcdefghiA
BCDEFGHIJ!
@#$%^&*()Z
ZZ

2.3 Vector 예제

public class VectorEx1 {
    public static void main(String[] args) {
        Vector vector = new Vector(5);
        vector.add("1");
        vector.add("2");
        vector.add("3");
        print(vector);

        System.out.println();

        vector.trimToSize();
        System.out.println("after trimToSize()");
        print(vector);

        System.out.println();

        vector.ensureCapacity(6);
        System.out.println("after ensureCapacity()");
        print(vector);

        System.out.println();

        vector.setSize(7);
        System.out.println("after setSize()");
        print(vector);

        System.out.println();

        vector.clear();
        System.out.println("after clear()");
        print(vector);

    }

    public static void print(Vector vector) {
        System.out.println(vector);
        System.out.println("size : " + vector.size());
        System.out.println("capacity : " + vector.capacity());
    }
}
[1, 2, 3]
size : 3
capacity : 5

after trimToSize()
[1, 2, 3]
size : 3
capacity : 3

after ensureCapacity()
[1, 2, 3]
size : 3
capacity : 6

after setSize()
[1, 2, 3, null, null, null, null]
size : 7
capacity : 12

after clear()
[]
size : 0
capacity : 12